{"id":29943234,"url":"https://github.com/sourcefuse/terraform-aws-arc-s3","last_synced_at":"2026-02-07T22:34:02.727Z","repository":{"id":246380187,"uuid":"811313022","full_name":"sourcefuse/terraform-aws-arc-s3","owner":"sourcefuse","description":"terraform module for provisioning s3 buckets","archived":false,"fork":false,"pushed_at":"2025-09-04T13:07:32.000Z","size":4450,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-09-04T15:10:46.065Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sourcefuse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"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":"2024-06-06T11:02:14.000Z","updated_at":"2024-08-29T16:42:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"b1da3064-e386-4a9d-88f3-9833c0a3b7a6","html_url":"https://github.com/sourcefuse/terraform-aws-arc-s3","commit_stats":null,"previous_names":["sourcefuse/terraform-aws-arc-s3"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/sourcefuse/terraform-aws-arc-s3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-s3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-s3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-s3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-s3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sourcefuse","download_url":"https://codeload.github.com/sourcefuse/terraform-aws-arc-s3/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sourcefuse%2Fterraform-aws-arc-s3/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29211127,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T22:22:11.602Z","status":"ssl_error","status_checked_at":"2026-02-07T22:22:10.684Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2025-08-03T02:14:40.047Z","updated_at":"2026-02-07T22:34:02.708Z","avatar_url":"https://github.com/sourcefuse.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Module Structure](./static/s3.png)\n\n# [terraform-aws-arc-s3](https://github.com/sourcefuse/terraform-aws-arc-s3)\n\n\u003ca href=\"https://github.com/sourcefuse/terraform-aws-arc-s3/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/release/sourcefuse/terraform-aws-arc-s3.svg?style=for-the-badge\" alt=\"Latest Release\"/\u003e\u003c/a\u003e \u003ca href=\"https://github.com/sourcefuse/terraform-aws-arc-s3/commits\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/sourcefuse/terraform-aws-arc-s3.svg?style=for-the-badge\" alt=\"Last Updated\"/\u003e\u003c/a\u003e ![Terraform](https://img.shields.io/badge/terraform-%235835CC.svg?style=for-the-badge\u0026logo=terraform\u0026logoColor=white) ![GitHub Actions](https://img.shields.io/badge/github%20actions-%232671E5.svg?style=for-the-badge\u0026logo=githubactions\u0026logoColor=white)\n\n[![Quality gate](https://sonarcloud.io/api/project_badges/quality_gate?project=sourcefuse_terraform-aws-arc-s3\u0026token=3c75a1b94d1b6ab3f1b98785e484d5ede197851e)](https://sonarcloud.io/summary/new_code?id=sourcefuse_terraform-aws-arc-s3)\n\n[![Known Vulnerabilities](https://github.com/sourcefuse/terraform-aws-arc-s3/actions/workflows/snyk.yaml/badge.svg)](https://github.com/sourcefuse/terraform-aws-arc-s3/actions/workflows/snyk.yaml)\n\n## Overview\n\nSourceFuse AWS Reference Architecture (ARC) Terraform module for managing the s3 module.\n\n## Features\n- Manages S3 Buckets: Handles the creation, deletion, and maintenance of Amazon S3 (Simple Storage Service) buckets, which are containers for storing data in the cloud.\n\n- Supports Lifecycle Rules: Enables the setup and management of lifecycle rules that automate the transition of data between different storage classes and the deletion of objects after a specified period.\n\n- Configurable Bucket Policies and Access Controls: Allows for the configuration of bucket policies and access control lists (ACLs) to define permissions and manage access to the data stored in S3 buckets, ensuring data security and compliance.\n\n- Supports CORS and Website Configurations: Provides support for Cross-Origin Resource Sharing (CORS) configurations to manage cross-origin requests to the bucket's resources, and allows for configuring the bucket to host static websites, including setting index and error documents.\n\n- Cross-Region Replication: Facilitates the automatic, asynchronous copying of objects across different AWS regions to enhance data availability, disaster recovery, and data compliance requirements.\n\n## Introduction\n\nSourceFuse's AWS Reference Architecture (ARC) Terraform module for managing Amazon S3 buckets using Terraform. It simplifies the creation, configuration, and management of S3 buckets by providing a set of predefined settings and options. The module supports advanced features such as bucket policies, access control lists (ACLs), lifecycle rules, and versioning. It also includes support for configuring Cross-Origin Resource Sharing (CORS) and cross-region replication for enhanced data availability and resilience. By leveraging this module, users can ensure consistent, secure, and efficient management of their S3 resources within an infrastructure-as-code (IaC) framework.\n\n## Usage\n\nTo see a full example, check out the [main.tf](https://github.com/sourcefuse/terraform-aws-arc-s3/blob/feature/fix-docs/examples/simple/main.tf) file in the example folder.  \n\n```hcl\nmodule \"s3\" {\n  source      = \"sourcefuse/arc-s3/aws\"\n  version     = \"0.0.1\"\n\n  name             = var.name\n  acl              = var.acl\n  lifecycle_config = local.lifecycle_config\n  tags             = module.tags.tags\n}\n\n```\n\n\u003c!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | ~\u003e 1.3, \u003c 2.0.0 |\n| \u003ca name=\"requirement_aws\"\u003e\u003c/a\u003e [aws](#requirement\\_aws) | ~\u003e 5.0 |\n| \u003ca name=\"requirement_random\"\u003e\u003c/a\u003e [random](#requirement\\_random) | ~\u003e 3.0 |\n\n## Providers\n\nNo providers.\n\n## Modules\n\n| Name | Source | Version |\n|------|--------|---------|\n| \u003ca name=\"module_bucket\"\u003e\u003c/a\u003e [bucket](#module\\_bucket) | ./modules/bucket | n/a |\n| \u003ca name=\"module_replication\"\u003e\u003c/a\u003e [replication](#module\\_replication) | ./modules/replication | n/a |\n\n## Resources\n\nNo resources.\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_acl\"\u003e\u003c/a\u003e [acl](#input\\_acl) | Please node ACL is deprecated by AWS in favor of bucket policies.\u003cbr\u003eDefaults to \"private\" for backwards compatibility,recommended to set `s3_object_ownership` to \"BucketOwnerEnforced\" instead. | `string` | `\"private\"` | no |\n| \u003ca name=\"input_availability_zone_id\"\u003e\u003c/a\u003e [availability\\_zone\\_id](#input\\_availability\\_zone\\_id) | The ID of the availability zone. | `string` | `\"\"` | no |\n| \u003ca name=\"input_bucket_logging_data\"\u003e\u003c/a\u003e [bucket\\_logging\\_data](#input\\_bucket\\_logging\\_data) | (optional) Bucket logging data | \u003cpre\u003eobject({\u003cbr\u003e    enable        = optional(bool, false)\u003cbr\u003e    target_bucket = optional(string, null)\u003cbr\u003e    target_prefix = optional(string, null)\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"enable\": false,\u003cbr\u003e  \"target_bucket\": null,\u003cbr\u003e  \"target_prefix\": null\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_bucket_policy_doc\"\u003e\u003c/a\u003e [bucket\\_policy\\_doc](#input\\_bucket\\_policy\\_doc) | (optional) S3 bucket Policy doc | `string` | `null` | no |\n| \u003ca name=\"input_cors_configuration\"\u003e\u003c/a\u003e [cors\\_configuration](#input\\_cors\\_configuration) | List of S3 bucket CORS configurations | \u003cpre\u003elist(object({\u003cbr\u003e    id              = optional(string)\u003cbr\u003e    allowed_headers = optional(list(string))\u003cbr\u003e    allowed_methods = optional(list(string))\u003cbr\u003e    allowed_origins = optional(list(string))\u003cbr\u003e    expose_headers  = optional(list(string))\u003cbr\u003e    max_age_seconds = optional(number)\u003cbr\u003e  }))\u003c/pre\u003e | `[]` | no |\n| \u003ca name=\"input_create_bucket\"\u003e\u003c/a\u003e [create\\_bucket](#input\\_create\\_bucket) | (optional) Whether to create bucket | `bool` | `true` | no |\n| \u003ca name=\"input_create_s3_directory_bucket\"\u003e\u003c/a\u003e [create\\_s3\\_directory\\_bucket](#input\\_create\\_s3\\_directory\\_bucket) | Control the creation of the S3 directory bucket. Set to true to create the bucket, false to skip. | `bool` | `false` | no |\n| \u003ca name=\"input_enable_versioning\"\u003e\u003c/a\u003e [enable\\_versioning](#input\\_enable\\_versioning) | Whether to enable versioning for the bucket | `bool` | `true` | no |\n| \u003ca name=\"input_event_notification_details\"\u003e\u003c/a\u003e [event\\_notification\\_details](#input\\_event\\_notification\\_details) | (optional) S3 event notification details | \u003cpre\u003eobject({\u003cbr\u003e    enabled = bool\u003cbr\u003e    lambda_list = optional(list(object({\u003cbr\u003e      lambda_function_arn = string\u003cbr\u003e      events              = optional(list(string), [\"s3:ObjectCreated:*\"])\u003cbr\u003e      filter_prefix       = string\u003cbr\u003e      filter_suffix       = string\u003cbr\u003e    })), [])\u003cbr\u003e\u003cbr\u003e    queue_list = optional(list(object({\u003cbr\u003e      queue_arn = string\u003cbr\u003e      events    = optional(list(string), [\"s3:ObjectCreated:*\"])\u003cbr\u003e    })), [])\u003cbr\u003e\u003cbr\u003e    topic_list = optional(list(object({\u003cbr\u003e      topic_arn = string\u003cbr\u003e      events    = optional(list(string), [\"s3:ObjectCreated:*\"])\u003cbr\u003e    })), [])\u003cbr\u003e\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"enabled\": false\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_force_destroy\"\u003e\u003c/a\u003e [force\\_destroy](#input\\_force\\_destroy) | (Optional, Default:false) Boolean that indicates all objects (including any locked objects) should be deleted from the bucket when the bucket is destroyed so that the bucket can be destroyed without error. These objects are not recoverable. This only deletes objects when the bucket is destroyed, not when setting this parameter to true. Once this parameter is set to true, there must be a successful terraform apply run before a destroy is required to update this value in the resource state. Without a successful terraform apply after this parameter is set, this flag will have no effect. If setting this field in the same operation that would require replacing the bucket or destroying the bucket, this flag will not work. Additionally when importing a bucket, a successful terraform apply is required to set this value in state before it will take effect on a destroy operation. | `bool` | `false` | no |\n| \u003ca name=\"input_lifecycle_config\"\u003e\u003c/a\u003e [lifecycle\\_config](#input\\_lifecycle\\_config) | (optional) S3 Lifecycle configuration | \u003cpre\u003eobject({\u003cbr\u003e    enabled = bool\u003cbr\u003e\u003cbr\u003e    expected_bucket_owner = optional(string, null)\u003cbr\u003e\u003cbr\u003e    rules = list(object({\u003cbr\u003e      id = string\u003cbr\u003e\u003cbr\u003e      expiration = optional(object({\u003cbr\u003e        date                         = optional(string, null)\u003cbr\u003e        days                         = optional(string, null)\u003cbr\u003e        expired_object_delete_marker = optional(bool, false)\u003cbr\u003e      }), null)\u003cbr\u003e      transition = optional(object({\u003cbr\u003e        date          = string\u003cbr\u003e        days          = number\u003cbr\u003e        storage_class = string\u003cbr\u003e      }), null)\u003cbr\u003e      noncurrent_version_expiration = optional(object({\u003cbr\u003e        newer_noncurrent_versions = number\u003cbr\u003e        noncurrent_days           = number\u003cbr\u003e      }), null)\u003cbr\u003e      noncurrent_version_transition = optional(object({\u003cbr\u003e        newer_noncurrent_versions = number\u003cbr\u003e        noncurrent_days           = number\u003cbr\u003e        storage_class             = string\u003cbr\u003e      }), null)\u003cbr\u003e\u003cbr\u003e      filter = optional(object({\u003cbr\u003e        object_size_greater_than = string\u003cbr\u003e        object_size_less_than    = string\u003cbr\u003e        prefix                   = string\u003cbr\u003e        tags                     = map(string)\u003cbr\u003e      }), null)\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"enabled\": false,\u003cbr\u003e  \"rules\": []\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_name\"\u003e\u003c/a\u003e [name](#input\\_name) | Bucket name. If provided, the bucket will be created with this name instead of generating the name from the context | `string` | n/a | yes |\n| \u003ca name=\"input_object_lock_config\"\u003e\u003c/a\u003e [object\\_lock\\_config](#input\\_object\\_lock\\_config) | (optional) Object Lock configuration | \u003cpre\u003eobject({\u003cbr\u003e    mode = optional(string, \"COMPLIANCE\")\u003cbr\u003e    days = optional(number, 30)\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"days\": 30,\u003cbr\u003e  \"mode\": \"COMPLIANCE\"\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_object_lock_enabled\"\u003e\u003c/a\u003e [object\\_lock\\_enabled](#input\\_object\\_lock\\_enabled) | (Optional, Forces new resource) Indicates whether this bucket has an Object Lock configuration enabled. Valid values are true or false. This argument is not supported in all regions or partitions. | `string` | `false` | no |\n| \u003ca name=\"input_object_ownership\"\u003e\u003c/a\u003e [object\\_ownership](#input\\_object\\_ownership) | (Optional) Object ownership. Valid values: BucketOwnerPreferred, ObjectWriter or BucketOwnerEnforced\u003cbr\u003e BucketOwnerPreferred - Objects uploaded to the bucket change ownership to the bucket owner if the objects are uploaded with the bucket-owner-full-control canned ACL.\u003cbr\u003e ObjectWriter - Uploading account will own the object if the object is uploaded with the bucket-owner-full-control canned ACL.\u003cbr\u003e BucketOwnerEnforced - Bucket owner automatically owns and has full control over every object in the bucket. ACLs no longer affect permissions to data in the S3 bucket. | `string` | `\"BucketOwnerPreferred\"` | no |\n| \u003ca name=\"input_public_access_config\"\u003e\u003c/a\u003e [public\\_access\\_config](#input\\_public\\_access\\_config) | (Optional)\u003cbr\u003eblock\\_public\\_acls - Whether Amazon S3 should block public ACLs for this bucket. Defaults to false. Enabling this setting does not affect existing policies or ACLs. When set to true causes the following behavior:\u003cbr\u003e  PUT Bucket acl and PUT Object acl calls will fail if the specified ACL allows public access.\u003cbr\u003e  PUT Object calls will fail if the request includes an object ACL.\u003cbr\u003eblock\\_public\\_policy - Whether Amazon S3 should block public bucket policies for this bucket. Defaults to false. Enabling this setting does not affect the existing bucket policy.\u003cbr\u003e  When set to true causes Amazon S3 to:\u003cbr\u003e  Reject calls to PUT Bucket policy if the specified bucket policy allows public access.\u003cbr\u003eignore\\_public\\_acls - Whether Amazon S3 should block public bucket policies for this bucket. Defaults to false. Enabling this setting does not affect the existing bucket policy.\u003cbr\u003e  When set to true causes Amazon S3 to:\u003cbr\u003e  Reject calls to PUT Bucket policy if the specified bucket policy allows public access.\u003cbr\u003erestrict\\_public\\_buckets - Whether Amazon S3 should block public bucket policies for this bucket. Defaults to false. Enabling this setting does not affect the existing bucket policy.\u003cbr\u003e  When set to true causes Amazon S3 to:\u003cbr\u003e  Reject calls to PUT Bucket policy if the specified bucket policy allows public access. | \u003cpre\u003eobject({\u003cbr\u003e    block_public_acls       = optional(bool, true)\u003cbr\u003e    block_public_policy     = optional(bool, true)\u003cbr\u003e    ignore_public_acls      = optional(bool, true)\u003cbr\u003e    restrict_public_buckets = optional(bool, true)\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"block_public_acls\": true,\u003cbr\u003e  \"block_public_policy\": true,\u003cbr\u003e  \"ignore_public_acls\": true,\u003cbr\u003e  \"restrict_public_buckets\": true\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_replication_config\"\u003e\u003c/a\u003e [replication\\_config](#input\\_replication\\_config) | Replication configuration for S3 bucket | \u003cpre\u003eobject({\u003cbr\u003e    enable    = bool\u003cbr\u003e    role_name = optional(string, null) // if null , it will create new role\u003cbr\u003e\u003cbr\u003e    rules = list(object({\u003cbr\u003e      id = optional(string, null) // if null \"${var.source_bucket_name}-rule-index\"\u003cbr\u003e      filter = optional(list(object({\u003cbr\u003e        prefix = optional(string, null)\u003cbr\u003e        tags   = optional(map(string), {})\u003cbr\u003e      })), [])\u003cbr\u003e\u003cbr\u003e      delete_marker_replication = optional(string, \"Enabled\")\u003cbr\u003e\u003cbr\u003e      source_selection_criteria = optional(object({\u003cbr\u003e        replica_modifications = optional(object({\u003cbr\u003e          status = optional(string, \"Enabled\")\u003cbr\u003e        }))\u003cbr\u003e        kms_key_id = optional(string, null)\u003cbr\u003e        sse_kms_encrypted_objects = optional(object({\u003cbr\u003e          status = optional(string, \"Enabled\")\u003cbr\u003e        }))\u003cbr\u003e      }))\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e      destinations = list(object({\u003cbr\u003e        bucket        = string\u003cbr\u003e        storage_class = optional(string, \"STANDARD\")\u003cbr\u003e        encryption_configuration = optional(object({\u003cbr\u003e          replica_kms_key_id = optional(string, null)\u003cbr\u003e        }))\u003cbr\u003e      }))\u003cbr\u003e    }))\u003cbr\u003e\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"enable\": false,\u003cbr\u003e  \"role_name\": null,\u003cbr\u003e  \"rules\": []\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_server_side_encryption_config_data\"\u003e\u003c/a\u003e [server\\_side\\_encryption\\_config\\_data](#input\\_server\\_side\\_encryption\\_config\\_data) | (optional) S3 encryption details | \u003cpre\u003eobject({\u003cbr\u003e    bucket_key_enabled = optional(bool, true)\u003cbr\u003e    sse_algorithm      = optional(string, \"AES256\")\u003cbr\u003e    kms_master_key_id  = optional(string, null)\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"bucket_key_enabled\": true,\u003cbr\u003e  \"kms_master_key_id\": null,\u003cbr\u003e  \"sse_algorithm\": \"AES256\"\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_tags\"\u003e\u003c/a\u003e [tags](#input\\_tags) | Tags to assign the resources. | `map(string)` | `{}` | no |\n| \u003ca name=\"input_transfer_acceleration_enabled\"\u003e\u003c/a\u003e [transfer\\_acceleration\\_enabled](#input\\_transfer\\_acceleration\\_enabled) | (optional) Whether to enable Trasfer accelaration | `bool` | `false` | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_bucket_arn\"\u003e\u003c/a\u003e [bucket\\_arn](#output\\_bucket\\_arn) | Bucket ARN |\n| \u003ca name=\"output_bucket_id\"\u003e\u003c/a\u003e [bucket\\_id](#output\\_bucket\\_id) | Bucket ID or Name |\n| \u003ca name=\"output_destination_buckets\"\u003e\u003c/a\u003e [destination\\_buckets](#output\\_destination\\_buckets) | n/a |\n| \u003ca name=\"output_role_arn\"\u003e\u003c/a\u003e [role\\_arn](#output\\_role\\_arn) | Role used to S3 replication |\n\u003c!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK --\u003e\n\n## Development\n\n### Prerequisites\n\n- [terraform](https://learn.hashicorp.com/terraform/getting-started/install#installing-terraform)\n- [terraform-docs](https://github.com/segmentio/terraform-docs)\n- [pre-commit](https://pre-commit.com/#install)\n- [golang](https://golang.org/doc/install#install)\n- [golint](https://github.com/golang/lint#installation)\n\n### Configurations\n\n- Configure pre-commit hooks\n  ```sh\n  pre-commit install\n  ```\n\n### Versioning\n\nwhile Contributing or doing git commit please specify the breaking change in your commit message whether its major,minor or patch\n\nFor Example\n\n```sh\ngit commit -m \"your commit message #major\"\n```\nBy specifying this , it will bump the version and if you don't specify this in your commit message then by default it will consider patch and will bump that accordingly\n\n### Tests\n- Tests are available in `test` directory\n- Configure the dependencies\n  ```sh\n  cd test/\n  go mod init github.com/sourcefuse/terraform-aws-refarch-\u003cmodule_name\u003e\n  go get github.com/gruntwork-io/terratest/modules/terraform\n  ```\n- Now execute the test  \n  ```sh\n  go test -timeout  30m\n  ```\n\n## Authors\n\nThis project is authored by:\n- SourceFuse ARC Team\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsourcefuse%2Fterraform-aws-arc-s3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsourcefuse%2Fterraform-aws-arc-s3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsourcefuse%2Fterraform-aws-arc-s3/lists"}