{"id":44375027,"url":"https://github.com/subhamay-bhattacharyya-gha/cfn-create-stack-action","last_synced_at":"2026-02-11T20:42:13.834Z","repository":{"id":305999404,"uuid":"1021463293","full_name":"subhamay-bhattacharyya-gha/cfn-create-stack-action","owner":"subhamay-bhattacharyya-gha","description":"✅ ⭐️ GitHub Composite Action - CloudFormation Create Stack","archived":false,"fork":false,"pushed_at":"2025-08-06T22:17:29.000Z","size":182,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-06T22:23:21.039Z","etag":null,"topics":["chatgpt","cloudformation","devspace-hackathon","github-codespace","github-copilot","github-reusable-action","kiro-dev","openai","semantic-release-plugin"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/subhamay-bhattacharyya-gha.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-17T12:39:26.000Z","updated_at":"2025-07-29T19:42:18.000Z","dependencies_parsed_at":"2025-07-23T05:31:09.986Z","dependency_job_id":"5077ca41-275c-4492-896a-47d2103b7e63","html_url":"https://github.com/subhamay-bhattacharyya-gha/cfn-create-stack-action","commit_stats":null,"previous_names":["subhamay-bhattacharyya-gha/cfn-create-stack-action"],"tags_count":3,"template":false,"template_full_name":"subhamay-bhattacharyya-gha/github-action-template","purl":"pkg:github/subhamay-bhattacharyya-gha/cfn-create-stack-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subhamay-bhattacharyya-gha%2Fcfn-create-stack-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subhamay-bhattacharyya-gha%2Fcfn-create-stack-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subhamay-bhattacharyya-gha%2Fcfn-create-stack-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subhamay-bhattacharyya-gha%2Fcfn-create-stack-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/subhamay-bhattacharyya-gha","download_url":"https://codeload.github.com/subhamay-bhattacharyya-gha/cfn-create-stack-action/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/subhamay-bhattacharyya-gha%2Fcfn-create-stack-action/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29344417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T20:11:40.865Z","status":"ssl_error","status_checked_at":"2026-02-11T20:10:41.637Z","response_time":97,"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":["chatgpt","cloudformation","devspace-hackathon","github-codespace","github-copilot","github-reusable-action","kiro-dev","openai","semantic-release-plugin"],"created_at":"2026-02-11T20:42:13.083Z","updated_at":"2026-02-11T20:42:13.828Z","avatar_url":"https://github.com/subhamay-bhattacharyya-gha.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CloudFormation Deployment Action\n\n![Built with Kiro](https://img.shields.io/badge/Built%20with-Kiro-blue?style=flat\u0026logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEyIDJMMTMuMDkgOC4yNkwyMCA5TDEzLjA5IDE1Ljc0TDEyIDIyTDEwLjkxIDE1Ljc0TDQgOUwxMC45MSA4LjI2TDEyIDJaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K)\u0026nbsp;![GitHub Action](https://img.shields.io/badge/GitHub-Action-blue?logo=github)\u0026nbsp;![Release](https://github.com/subhamay-bhattacharyya-gha/cfn-create-stack-action/actions/workflows/release.yaml/badge.svg)\u0026nbsp;![Commit Activity](https://img.shields.io/github/commit-activity/t/subhamay-bhattacharyya-gha/cfn-create-stack-action)\u0026nbsp;![Bash](https://img.shields.io/badge/Language-Bash-green?logo=gnubash)\u0026nbsp;![CloudFormation](https://img.shields.io/badge/AWS-CloudFormation-orange?logo=amazonaws)\u0026nbsp;![Last Commit](https://img.shields.io/github/last-commit/subhamay-bhattacharyya-gha/cfn-create-stack-action)\u0026nbsp;![Release Date](https://img.shields.io/github/release-date/subhamay-bhattacharyya-gha/cfn-create-stack-action)\u0026nbsp;![Repo Size](https://img.shields.io/github/repo-size/subhamay-bhattacharyya-gha/cfn-create-stack-action)\u0026nbsp;![File Count](https://img.shields.io/github/directory-file-count/subhamay-bhattacharyya-gha/cfn-create-stack-action)\u0026nbsp;![Issues](https://img.shields.io/github/issues/subhamay-bhattacharyya-gha/cfn-create-stack-action)\u0026nbsp;![Top Language](https://img.shields.io/github/languages/top/subhamay-bhattacharyya-gha/cfn-create-stack-action)\u0026nbsp;![Custom Endpoint](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/bsubhamay/0456a5201944f7e604f8c24b011a5780/raw/cfn-create-stack-action.json?)\n\nA reusable GitHub Action that automates the deployment of AWS CloudFormation stacks with parameter support, real-time monitoring, and comprehensive error handling.\n\n## Features\n\n- 🚀 **Easy CloudFormation Deployment**: Deploy stacks with a simple, standardized interface\n- 📊 **Real-time Monitoring**: Track deployment progress with live stack event monitoring\n- 🔧 **Flexible Parameter Support**: Accepts both simple JSON and CloudFormation native parameter formats\n- 🏷️ **Smart Stack Tagging**: Apply tags with automatic value quoting for spaces and special characters\n- 🛡️ **Comprehensive Error Handling**: Clear error messages and proper exit codes for CI/CD integration\n- 🔐 **Security-First**: Automatic IAM capability handling with secure parameter processing\n- ✅ **Template Validation**: Pre-deployment template validation to catch errors early\n- 🚫 **No Rollback on Failure**: Disabled rollback allows for easier debugging of failed deployments\n- 🔄 **Robust Tag Processing**: Fallback mechanisms ensure tags are processed even with temp file issues\n- 📊 **GitHub Actions Step Summary**: Automatic generation of deployment summary in GitHub Actions UI\n- 📋 **Detailed Output**: Stack outputs and deployment summaries for troubleshooting\n\n---\n\n## Inputs\n\n| Name | Description | Required | Default |\n|------|-------------|----------|---------|\n| `stack-name` | Name of the CloudFormation stack to deploy | Yes | — |\n| `template-path` | Path to the CloudFormation template file (relative to repository root) | Yes | — |\n| `deployment-parameters` | CloudFormation parameters as JSON string (supports multiple formats) | No | `null` |\n| `cloudformation-tags` | CloudFormation tags as JSON string (key-value pairs) | No | `null` |\n\n### Parameter Formats\n\nThe action supports two JSON parameter formats:\n\n#### Simple Key-Value Format\n```json\n{\n  \"Environment\": \"production\",\n  \"InstanceType\": \"t3.micro\",\n  \"VpcId\": \"vpc-12345678\"\n}\n```\n\n#### CloudFormation Native Format\n```json\n[\n  {\"ParameterName\": \"Environment\", \"ParameterValue\": \"production\"},\n  {\"ParameterName\": \"InstanceType\", \"ParameterValue\": \"t3.micro\"},\n  {\"ParameterName\": \"VpcId\", \"ParameterValue\": \"vpc-12345678\"}\n]\n```\n\n---\n\n## Prerequisites\n\n### AWS Credentials\nThe action requires AWS credentials to be configured in your GitHub Actions environment. This can be done through:\n\n- **IAM Roles (Recommended)**: Use `aws-actions/configure-aws-credentials` action\n- **Environment Variables**: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_DEFAULT_REGION`\n- **GitHub Secrets**: Store credentials securely in repository secrets\n\n### Required Permissions\nYour AWS credentials must have the following permissions:\n- `cloudformation:*` (for stack operations)\n- `sts:GetCallerIdentity` (for credential validation)\n- Additional permissions based on resources in your CloudFormation templates\n\n### System Dependencies\nThe following tools are required and typically pre-installed on GitHub Actions runners:\n- AWS CLI v2\n- jq (JSON processor)\n\n---\n\n## Usage\n\n### Quick Start\n\nTo use this action in your GitHub workflow, follow these steps:\n\n1. **Set up AWS credentials** in your repository (see [Prerequisites](#prerequisites))\n2. **Create a CloudFormation template** in your repository\n3. **Add the action** to your workflow file\n\n### Basic Workflow Setup\n\nCreate a `.github/workflows/deploy.yml` file in your repository:\n\n```yaml\nname: Deploy CloudFormation Stack\n\non:\n  push:\n    branches: [main]\n  workflow_dispatch:\n\njobs:\n  deploy:\n    name: Deploy Infrastructure\n    runs-on: ubuntu-latest\n    \n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n      \n      - name: Configure AWS credentials\n        uses: aws-actions/configure-aws-credentials@v4\n        with:\n          role-to-assume: ${{ secrets.AWS_ROLE_ARN }}\n          aws-region: us-east-1\n      \n      - name: Deploy CloudFormation stack\n        uses: subhamay-bhattacharyya-gha/cfn-create-stack-action@main\n        with:\n          stack-name: my-stack\n          template-path: cloudformation/template.yaml\n```\n\n### Action Inputs\n\nThe action accepts the following inputs:\n\n- **`stack-name`** (required): The name for your CloudFormation stack\n- **`template-path`** (required): Path to your CloudFormation template file\n- **`deployment-parameters`** (optional): Parameters for your template in JSON format\n- **`cloudformation-tags`** (optional): Tags for your CloudFormation stack in JSON format\n\n### Parameter Usage\n\nYou can pass parameters to your CloudFormation template in two ways:\n\n#### Method 1: Simple JSON Object\n```yaml\ndeployment-parameters: |\n  {\n    \"Environment\": \"production\",\n    \"InstanceType\": \"t3.micro\"\n  }\n```\n\n#### Method 2: CloudFormation Native Format\n```yaml\ndeployment-parameters: |\n  [\n    {\"ParameterName\": \"Environment\", \"ParameterValue\": \"production\"},\n    {\"ParameterName\": \"InstanceType\", \"ParameterValue\": \"t3.micro\"}\n  ]\n```\n\n### Tag Usage\n\nYou can apply tags to your CloudFormation stack using the `cloudformation-tags` input in two formats:\n\n#### Simple Key-Value Format\n```yaml\ncloudformation-tags: |\n  {\n    \"Environment\": \"production\",\n    \"Project\": \"myapp\",\n    \"Owner\": \"team-alpha\",\n    \"CostCenter\": \"engineering\"\n  }\n```\n\n#### CloudFormation Native Format (Recommended)\n```yaml\ncloudformation-tags: |\n  [\n    {\"Key\": \"Environment\", \"Value\": \"production\"},\n    {\"Key\": \"Project\", \"Value\": \"myapp\"},\n    {\"Key\": \"Owner\", \"Value\": \"team-alpha\"},\n    {\"Key\": \"CostCenter\", \"Value\": \"engineering\"}\n  ]\n```\n\n**Note**: Tag values containing spaces and special characters are automatically quoted for proper AWS CLI handling.\n\n### Common Use Cases\n\n#### 1. Environment-based Deployment\n```yaml\n- name: Deploy to environment\n  uses: subhamay-bhattacharyya-gha/cfn-create-stack-action@main\n  with:\n    stack-name: myapp-${{ github.ref_name }}\n    template-path: infrastructure/main.yaml\n    deployment-parameters: |\n      {\n        \"Environment\": \"${{ github.ref_name }}\",\n        \"InstanceType\": \"${{ github.ref_name == 'main' \u0026\u0026 't3.medium' || 't3.micro' }}\"\n      }\n    cloudformation-tags: |\n      {\n        \"Environment\": \"${{ github.ref_name }}\",\n        \"Project\": \"myapp\",\n        \"DeployedBy\": \"GitHub Actions\"\n      }\n```\n\n#### 2. Using GitHub Secrets\n```yaml\n- name: Deploy with secrets\n  uses: subhamay-bhattacharyya-gha/cfn-create-stack-action@main\n  with:\n    stack-name: secure-stack\n    template-path: templates/secure.yaml\n    deployment-parameters: |\n      {\n        \"DatabasePassword\": \"${{ secrets.DB_PASSWORD }}\",\n        \"ApiKey\": \"${{ secrets.API_KEY }}\"\n      }\n    cloudformation-tags: |\n      {\n        \"Environment\": \"production\",\n        \"Security\": \"high\",\n        \"Owner\": \"${{ github.actor }}\"\n      }\n```\n\n#### 3. Matrix Deployments\n```yaml\nstrategy:\n  matrix:\n    environment: [dev, staging, prod]\n    \nsteps:\n  - name: Deploy to ${{ matrix.environment }}\n    uses: subhamay-bhattacharyya-gha/cfn-create-stack-action@main\n    with:\n      stack-name: myapp-${{ matrix.environment }}\n      template-path: infrastructure/app.yaml\n      deployment-parameters: |\n        {\n          \"Environment\": \"${{ matrix.environment }}\"\n        }\n      cloudformation-tags: |\n        {\n          \"Environment\": \"${{ matrix.environment }}\",\n          \"Project\": \"myapp\",\n          \"ManagedBy\": \"GitHubActions\"\n        }\n```\n\n---\n\n## Usage Examples\n\n### Basic Usage\n\n```yaml\nname: Deploy Infrastructure\n\non:\n  push:\n    branches: [main]\n    paths: ['infrastructure/**']\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Configure AWS Credentials\n        uses: aws-actions/configure-aws-credentials@v4\n        with:\n          role-to-assume: arn:aws:iam::123456789012:role/GitHubActionsRole\n          aws-region: us-east-1\n\n      - name: Deploy CloudFormation Stack\n        uses: subhamay-bhattacharyya-gha/cfn-create-stack-action@main\n        with:\n          stack-name: my-application-stack\n          template-path: infrastructure/app-stack.yaml\n```\n\n### With Simple Parameters\n\n```yaml\n      - name: Deploy with Parameters\n        uses: subhamay-bhattacharyya-gha/cfn-create-stack-action@main\n        with:\n          stack-name: my-app-${{ github.ref_name }}\n          template-path: infrastructure/app-stack.yaml\n          deployment-parameters: |\n            {\n              \"Environment\": \"${{ github.ref_name }}\",\n              \"InstanceType\": \"t3.micro\",\n              \"KeyPairName\": \"my-keypair\"\n            }\n```\n\n### With CloudFormation Native Parameters\n\n```yaml\n      - name: Deploy with CloudFormation Parameters\n        uses: subhamay-bhattacharyya-gha/cfn-create-stack-action@main\n        with:\n          stack-name: my-database-stack\n          template-path: infrastructure/database.yaml\n          deployment-parameters: |\n            [\n              {\"ParameterName\": \"DBInstanceClass\", \"ParameterValue\": \"db.t3.micro\"},\n              {\"ParameterName\": \"DBName\", \"ParameterValue\": \"myapp\"},\n              {\"ParameterName\": \"MasterUsername\", \"ParameterValue\": \"admin\"}\n            ]\n```\n\n### Multi-Environment Deployment\n\n```yaml\nname: Multi-Environment Deployment\n\non:\n  workflow_dispatch:\n    inputs:\n      environment:\n        description: 'Environment to deploy'\n        required: true\n        type: choice\n        options: ['dev', 'staging', 'prod']\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    environment: ${{ github.event.inputs.environment }}\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n\n      - name: Configure AWS Credentials\n        uses: aws-actions/configure-aws-credentials@v4\n        with:\n          role-to-assume: ${{ vars.AWS_ROLE_ARN }}\n          aws-region: ${{ vars.AWS_REGION }}\n\n      - name: Deploy Infrastructure\n        uses: subhamay-bhattacharyya-gha/cfn-create-stack-action@main\n        with:\n          stack-name: myapp-${{ github.event.inputs.environment }}\n          template-path: infrastructure/main.yaml\n          deployment-parameters: |\n            {\n              \"Environment\": \"${{ github.event.inputs.environment }}\",\n              \"InstanceType\": \"${{ vars.INSTANCE_TYPE }}\",\n              \"MinSize\": \"${{ vars.MIN_SIZE }}\",\n              \"MaxSize\": \"${{ vars.MAX_SIZE }}\"\n            }\n```\n\n### With Conditional Parameters\n\n```yaml\n      - name: Set Parameters Based on Branch\n        id: params\n        run: |\n          if [ \"${{ github.ref_name }}\" == \"main\" ]; then\n            echo 'parameters={\"Environment\":\"prod\",\"InstanceType\":\"t3.medium\",\"MinSize\":\"2\"}' \u003e\u003e $GITHUB_OUTPUT\n          else\n            echo 'parameters={\"Environment\":\"dev\",\"InstanceType\":\"t3.micro\",\"MinSize\":\"1\"}' \u003e\u003e $GITHUB_OUTPUT\n          fi\n\n      - name: Deploy Stack\n        uses: subhamay-bhattacharyya-gha/cfn-create-stack-action@main\n        with:\n          stack-name: myapp-${{ github.ref_name }}\n          template-path: infrastructure/app.yaml\n          deployment-parameters: ${{ steps.params.outputs.parameters }}\n```\n\n### With CloudFormation Tags\n\n```yaml\n      - name: Deploy with Tags\n        uses: subhamay-bhattacharyya-gha/cfn-create-stack-action@main\n        with:\n          stack-name: tagged-stack\n          template-path: infrastructure/app.yaml\n          deployment-parameters: |\n            {\n              \"Environment\": \"production\",\n              \"InstanceType\": \"t3.medium\"\n            }\n          cloudformation-tags: |\n            {\n              \"Environment\": \"production\",\n              \"Project\": \"web-application\",\n              \"Owner\": \"platform-team\",\n              \"CostCenter\": \"engineering\",\n              \"ManagedBy\": \"GitHub Actions\",\n              \"Repository\": \"${{ github.repository }}\",\n              \"Branch\": \"${{ github.ref_name }}\",\n              \"CommitSha\": \"${{ github.sha }}\"\n            }\n```\n\n---\n\n## Output and Monitoring\n\n### Real-time Monitoring\nThe action provides real-time monitoring of your CloudFormation deployment:\n\n```\n=== CloudFormation Deployment ===\nStarting CloudFormation deployment...\nStack Name: my-application-stack\nTemplate: infrastructure/app-stack.yaml\nParameters: 3 parameter(s) configured\n\nDeployment started (PID: 12345)\nMonitoring stack events...\n\n|  Timestamp           |  Status              |  Type                    |  LogicalId           |  Reason              |\n|----------------------|----------------------|--------------------------|----------------------|----------------------|\n|  2024-01-15T10:30:15 |  CREATE_IN_PROGRESS  |  AWS::CloudFormation::Stack |  my-application-stack |  User Initiated      |\n|  2024-01-15T10:30:45 |  CREATE_IN_PROGRESS  |  AWS::S3::Bucket        |  MyBucket            |                      |\n|  2024-01-15T10:31:15 |  CREATE_COMPLETE     |  AWS::S3::Bucket        |  MyBucket            |                      |\n```\n\n### Stack Outputs\nAfter successful deployment, the action displays stack outputs:\n\n```\n=== Stack Outputs ===\nStack Outputs:\n|  OutputKey          |  OutputValue                    |  Description                    |\n|---------------------|---------------------------------|---------------------------------|\n|  BucketName         |  my-app-bucket-abc123           |  Name of the created S3 bucket  |\n|  BucketArn          |  arn:aws:s3:::my-app-bucket-abc123 |  ARN of the created S3 bucket   |\n```\n\n---\n\n## GitHub Actions Step Summary\n\nThe action automatically generates a comprehensive step summary that appears in the GitHub Actions UI, providing a quick overview of the deployment without needing to dig through logs.\n\n### Summary Format\n\nThe step summary includes:\n\n```markdown\n# CloudFormation Stack Creation Report\n\n## Summary\n✅ **Stack creation success**\n\n## Details\n| Property | Value |\n|----------|-------|\n| Stack Name | `my-application-stack` |\n| Final Status | `CREATE_COMPLETE` |\n| Operation Result | ✅ success |\n| Duration | 45s |\n\n## Timing Information\n- **Start Time:** 2025-08-08 18:52:13 UTC\n- **End Time:** 2025-08-08 18:52:58 UTC\n- **Total Duration:** 45s\n\n## Result\nThe CloudFormation stack has been successfully created.\n```\n\n### Summary Features\n\n- **Visual Status Indicators**: Clear success/failure indicators with emojis\n- **Deployment Details**: Stack name, final status, and operation result\n- **Accurate Timing**: Real deployment start and end times from CloudFormation events\n- **Duration Calculation**: Precise duration based on actual stack events\n- **Result Summary**: Clear description of the deployment outcome\n\n### Status Indicators\n\n| Status | Indicator | Description |\n|--------|-----------|-------------|\n| Success | ✅ success | Stack created/updated successfully |\n| Warning | ⚠️ warning | Stack completed but in unexpected state |\n| Failed | ❌ failed | Stack deployment failed |\n\nThe step summary is automatically generated for every deployment and provides immediate visibility into the deployment status directly in the GitHub Actions interface.\n\n---\n\n## Error Handling and Troubleshooting\n\n### Common Error Scenarios\n\n#### Missing Template File\n```\n❌ Error: CloudFormation template file not found at path: infrastructure/missing.yaml\nPlease ensure the template file exists and the path is correct.\n```\n\n#### Invalid Parameters\n```\n❌ Error: deployment-parameters must be valid JSON\nProvided parameters: [HIDDEN - 45 characters for security]\nJSON validation error: parse error: Expected separator ':' at line 2, column 15\n```\n\n#### AWS Permission Issues\n```\n❌ Error: AWS credentials are not configured or invalid\nPlease ensure AWS credentials are properly configured for this action.\n```\n\n#### Template Validation Failure\n```\n❌ Error: CloudFormation template validation failed\nTemplate: infrastructure/app.yaml\nAWS CLI validation output:\nValidationError: Template format error: Unresolved resource dependencies [MyVPC] in the Resources block of the template\n```\n\n### Troubleshooting Guide\n\n#### 1. Template Issues\n- **Validation Errors**: Check template syntax and resource dependencies\n- **Missing Resources**: Ensure all referenced resources exist or are defined\n- **Parameter Mismatches**: Verify parameter names match template definitions\n\n#### 2. Permission Issues\n- **AWS Credentials**: Ensure credentials are configured and valid\n- **IAM Permissions**: Verify required CloudFormation and resource permissions\n- **Cross-Account Access**: Check assume role permissions for cross-account deployments\n\n#### 3. Parameter Problems\n- **JSON Format**: Validate JSON syntax using online validators\n- **Parameter Names**: Ensure parameter names match template definitions exactly\n- **Data Types**: Check parameter values match expected types (string, number, etc.)\n\n#### 4. Stack State Issues\n- **Stack Exists**: Use unique stack names or delete existing stacks\n- **Update Conflicts**: Some resources may require replacement during updates\n- **Rollback States**: Delete failed stacks before retrying\n\n### Exit Codes\n\nThe action uses standard exit codes for CI/CD integration:\n\n- **0**: Deployment successful\n- **1**: Deployment failed (CloudFormation errors, validation failures)\n- **126**: System dependency execution issues\n- **127**: Missing system dependencies (AWS CLI, jq)\n\n---\n\n## Security Considerations\n\n### Parameter Security\n- Parameter values are never logged in plain text\n- Sensitive information is masked in logs as `[HIDDEN_FOR_SECURITY]`\n- Temporary parameter files are created in secure runner workspace\n\n### IAM Capabilities\n- Automatically includes `CAPABILITY_IAM` and `CAPABILITY_NAMED_IAM`\n- No user confirmation required for IAM resource creation\n- Follows AWS CloudFormation security best practices\n\n### AWS Credentials\n- Action does not store or handle AWS credentials directly\n- Relies on pre-configured credentials in runner environment\n- Supports all standard AWS credential methods\n\n---\n\n## Advanced Configuration\n\n### Custom AWS CLI Options\nThe action uses sensible defaults but you can customize behavior by modifying your templates or using stack policies.\n\n### Template Validation\nAll templates are validated before deployment using `aws cloudformation validate-template`.\n\n### Idempotent Deployments\nThe action uses `--no-fail-on-empty-changeset` to support idempotent deployments where no changes are detected.\n\n### Rollback Behavior\nThe action uses `--disable-rollback` flag, which means:\n- **On Failure**: Failed stacks remain in a failed state instead of rolling back\n- **Debugging**: Easier to troubleshoot issues by examining the failed resources\n- **Manual Cleanup**: Failed stacks need to be manually deleted before retrying\n- **Faster Failures**: No time spent on rollback operations during failures\n\n### Tag Processing\nThe action includes robust tag processing with the following features:\n- **Automatic Quoting**: Tag values with spaces are automatically quoted for AWS CLI compatibility\n- **Format Support**: Accepts both simple key-value objects and CloudFormation native array formats\n- **Fallback Mechanism**: Uses direct input if temporary file processing fails\n- **Special Character Handling**: Properly escapes quotes and special characters in tag values\n\n---\n\n## Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Development Setup\n1. Clone the repository\n2. Install dependencies: `npm install`\n3. Run tests: `./scripts/run-tests.sh`\n\n### Testing\nThe action includes comprehensive tests:\n- Unit tests for parameter processing\n- Integration tests with real CloudFormation templates\n- Error scenario testing\n- GitHub Actions workflow testing\n\nSee [tests/README.md](tests/README.md) for detailed testing information.\n\n---\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n---\n\n## Support\n\n- 📖 [Documentation](https://github.com/your-org/cloudformation-deployment-action/wiki)\n- 🐛 [Issue Tracker](https://github.com/your-org/cloudformation-deployment-action/issues)\n- 💬 [Discussions](https://github.com/your-org/cloudformation-deployment-action/discussions)\n- 📧 [Contact](mailto:support@your-org.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubhamay-bhattacharyya-gha%2Fcfn-create-stack-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsubhamay-bhattacharyya-gha%2Fcfn-create-stack-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsubhamay-bhattacharyya-gha%2Fcfn-create-stack-action/lists"}