# Contributing I love pull requests from everyone! By the way, I have a favor to ask you with your contribution :bow: ## Reporting issue - Please write your ... - platform (macOS, Linux, Windows, ...) - Ruby version - Terraforming version - Terraform version (if `terraform plan` failed) - executed command and error message (if any) ## Making changes - Currently, this gem supports only __AWS__ resources. Other providers are supported as separated gems. - Datadog: [terraforming-datadog](https://github.com/dtan4/terraforming-datadog) - DNSimple: [terraforming-dnsimple](https://github.com/dtan4/terraforming-dnsimple) - Do not bump gem version in your pull request. - Please follow the coding style of _existing_ code. Most of trivial rules can be checked by [RuboCop](https://github.com/bbatsov/rubocop) ([`rubocop.yml`](https://github.com/dtan4/terraforming/blob/master/.rubocop.yml)). - Coding style is checked automatically by [SideCI](https://sideci.com) right after creating pull request. If there is error, SideCI comments at the point error occured. - Please write tests for your changes. All tests are written with [RSpec](http://rspec.info/). ## Adding new resource - Class name must match to Terraforming's resource name without `aws_` prefix, and be a complete resource name. - e.g. `aws_iam_group_membership`: `IAMGroupMembership` - Yes, I know that some of resources I added a long ago don't follow to this rule... - File name must also match to Terraforming's resource name without `aws_` prefix. - e.g. `aws_iam_group_membership`: `iam_group_membership.rb` - Command name should be abbreviation. - e.g. `aws_iam_group_membership`: `iamgp` - Please check generation result by executing `terraform plan` with real resources. There should be NO diff with generated `.tf` and `.tfstate`. `script/generate` generates new resource code / test skeletons. ```bash $ script/generate ec2 ==> Generate ec2.rb ==> Generate ec2_spec.rb ==> Generate ec2.erb Add below code by hand. lib/terraforming.rb: require "terraforming/resource/ec2" lib/terraforming/cli.rb: module Terraforming class CLI < Thor # Subcommand name should be acronym. desc "ec2", "Ec2" def ec2 execute(Terraforming::Resource::Ec2, options) end spec/lib/terraforming/cli_spec.rb: module Terraforming describe CLI do context "resources" do describe "ec2" do let(:klass) { Terraforming::Resource::Ec2 let(:command) { :ec2 } it_behaves_like "CLI examples" end ```