# setup-terraform
The `hashicorp/setup-terraform` action is a JavaScript action that sets up Terraform CLI in your GitHub Actions workflow by: - Downloading a specific version of Terraform CLI and adding it to the `PATH`. - Configuring the [Terraform CLI configuration file](https://www.terraform.io/docs/commands/cli-config.html) with a Terraform Cloud/Enterprise hostname and API token. - Installing a wrapper script to wrap subsequent calls of the `terraform` binary and expose its STDOUT, STDERR, and exit code as outputs named `stdout`, `stderr`, and `exitcode` respectively. (This can be optionally skipped if subsequent steps in the same job do not need to access the results of Terraform commands.) After you've used the action, subsequent steps in the same job can run arbitrary Terraform commands using [the GitHub Actions `run` syntax](https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsrun). This allows most Terraform commands to work exactly like they do on your local command line. ## Usage This action can be run on `ubuntu-latest`, `windows-latest`, and `macos-latest` GitHub Actions runners. When running on `windows-latest` the shell should be set to Bash. The default configuration installs the latest version of Terraform CLI and installs the wrapper script to wrap subsequent calls to the `terraform` binary. ```yaml steps: - uses: hashicorp/setup-terraform@v1 ``` A specific version of Terraform CLI can be installed. ```yaml steps: - uses: hashicorp/setup-terraform@v1 with: terraform_version: 0.12.25 ``` Credentials for Terraform Cloud (app.terraform.io) can be configured. ```yaml steps: - uses: hashicorp/setup-terraform@v1 with: cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} ``` Credentials for Terraform Enterprise can be configured. ```yaml steps: - uses: hashicorp/setup-terraform@v1 with: cli_config_credentials_hostname: 'terraform.example.com' cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} ``` The wrapper script installation can be skipped. ```yaml steps: - uses: hashicorp/setup-terraform@v1 with: terraform_wrapper: false ``` Subsequent steps can access outputs when the wrapper script is installed. ```yaml steps: - uses: hashicorp/setup-terraform@v1 - run: terraform init - id: plan run: terraform plan -no-color - run: echo ${{ steps.plan.outputs.stdout }} - run: echo ${{ steps.plan.outputs.stderr }} - run: echo ${{ steps.plan.outputs.exitcode }} ``` Outputs can be used in subsequent steps to comment on the pull request: ```yaml defaults: run: working-directory: ${{ env.tf_actions_working_dir }} steps: - uses: actions/checkout@v2 - uses: hashicorp/setup-terraform@v1 - name: Terraform fmt id: fmt run: terraform fmt -check continue-on-error: true - name: Terraform Init id: init run: terraform init - name: Terraform Validate id: validate run: terraform validate -no-color - name: Terraform Plan id: plan run: terraform plan -no-color continue-on-error: true - uses: actions/github-script@0.9.0 if: github.event_name == 'pull_request' env: PLAN: "terraform\n${{ steps.plan.outputs.stdout }}" with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const output = `#### Terraform Format and Style 🖌\`${{ steps.fmt.outcome }}\` #### Terraform Initialization ⚙️\`${{ steps.init.outcome }}\` #### Terraform Validation 🤖\`${{ steps.validate.outputs.stdout }}\` #### Terraform Plan 📖\`${{ steps.plan.outcome }}\`