Действие hashicorp/setup-terraform
— это действие JavaScript, которое настраивает интерфейс командной строки Terraform в рабочем процессе GitHub Actions следующим образом:
PATH
.terraform
и предоставления его STDOUT, STDERR и кода выхода в качестве выходных данных с именами stdout
, stderr
и exitcode
соответственно. (Это можно пропустить, если последующие шаги того же задания не требуют доступа к результатам команд Terraform.) После того как вы использовали действие, последующие шаги в том же задании могут запускать произвольные команды Terraform с использованием синтаксиса run
действий GitHub. Это позволяет большинству команд Terraform работать точно так же, как в вашей локальной командной строке.
Это действие можно запустить в средствах запуска действий GitHub ubuntu-latest
, windows-latest
и macos-latest
. При работе в windows-latest
для оболочки должен быть установлен Bash. При запуске на самостоятельных средствах запуска действий GitHub NodeJS должен быть предварительно установлен с версией, указанной в action.yml
.
Конфигурация по умолчанию устанавливает последнюю версию Terraform CLI и устанавливает сценарий-оболочку для обертывания последующих вызовов двоичного файла terraform
:
steps :
- uses : hashicorp/setup-terraform@v3
Можно установить определенную версию Terraform CLI:
steps :
- uses : hashicorp/setup-terraform@v3
with :
terraform_version : " 1.1.7 "
Учетные данные для HCP Terraform (app.terraform.io) можно настроить:
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
Учетные данные для Terraform Enterprise (TFE) можно настроить:
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_hostname : ' terraform.example.com '
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
Установку скрипта-оболочки можно пропустить, установив для переменной terraform_wrapper
значение false
:
steps :
- uses : hashicorp/setup-terraform@v3
with :
terraform_wrapper : false
Последующие шаги могут получить доступ к выходным данным, когда установлен сценарий-оболочка:
steps :
- uses : hashicorp/setup-terraform@v3
- 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 }}
Выходные данные можно использовать на последующих шагах для комментирования запроса на включение:
Примечание. Количество символов внутри комментария GitHub ограничено (65535).
Из-за этого ограничения вы можете столкнуться с неудачным запуском рабочего процесса, даже если план удался.
Другой подход — добавить ваш план в переменную среды $GITHUB_STEP_SUMMARY, которая поддерживает уценку.
defaults :
run :
working-directory : ${{ env.tf_actions_working_dir }}
permissions :
pull-requests : write
steps :
- uses : actions/checkout@v4
- uses : hashicorp/setup-terraform@v3
- 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@v7
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.outcome }}`
<details><summary>Validation Output</summary>
```n
${{ steps.validate.outputs.stdout }}
```
</details>
#### Terraform Plan `${{ steps.plan.outcome }}`
<details><summary>Show Plan</summary>
```n
${process.env.PLAN}
```
</details>
*Pusher: @${{ github.actor }}, Action: `${{ github.event_name }}`, Working Directory: `${{ env.tf_actions_working_dir }}`, Workflow: `${{ github.workflow }}`*`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
Вместо того, чтобы каждый раз создавать новый комментарий, вы также можете обновить существующий:
defaults :
run :
working-directory : ${{ env.tf_actions_working_dir }}
permissions :
pull-requests : write
steps :
- uses : actions/checkout@v4
- uses : hashicorp/setup-terraform@v3
- 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@v7
if : github.event_name == 'pull_request'
env :
PLAN : " terraform n ${{ steps.plan.outputs.stdout }} "
with :
github-token : ${{ secrets.GITHUB_TOKEN }}
script : |
// 1. Retrieve existing bot comments for the PR
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
})
const botComment = comments.find(comment => {
return comment.user.type === 'Bot' && comment.body.includes('Terraform Format and Style')
})
// 2. Prepare format of the comment
const output = `#### Terraform Format and Style ?`${{ steps.fmt.outcome }}`
#### Terraform Initialization `${{ steps.init.outcome }}`
#### Terraform Validation ?`${{ steps.validate.outcome }}`
<details><summary>Validation Output</summary>
```n
${{ steps.validate.outputs.stdout }}
```
</details>
#### Terraform Plan `${{ steps.plan.outcome }}`
<details><summary>Show Plan</summary>
```n
${process.env.PLAN}
```
</details>
*Pusher: @${{ github.actor }}, Action: `${{ github.event_name }}`, Working Directory: `${{ env.tf_actions_working_dir }}`, Workflow: `${{ github.workflow }}`*`;
// 3. If we have a comment, update it, otherwise create a new one
if (botComment) {
github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: botComment.id,
body: output
})
} else {
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: output
})
}
Действие поддерживает следующие входные данные:
cli_config_credentials_hostname
— (необязательно) Имя хоста экземпляра HCP Terraform/Terraform Enterprise, которое нужно поместить в блок учетных данных файла конфигурации Terraform CLI. По умолчанию — app.terraform.io
.cli_config_credentials_token
— (необязательно) Токен API для экземпляра HCP Terraform/Terraform Enterprise, который нужно поместить в блок учетных данных файла конфигурации Terraform CLI.terraform_version
— (необязательно) Версия Terraform CLI для установки. Вместо строки полной версии вы также можете указать строку ограничения (доступные спецификации диапазонов см. в разделе «Диапазоны Semver»). Примеры: "<1.2.0"
, "~1.1.0"
, "1.1.7"
(все три устанавливают последнюю доступную версию 1.1
). Можно указать предварительные версии, и диапазон будет оставаться в пределах данного тега, например beta
или rc
. Если версия не указана, по умолчанию будет установлена latest
.terraform_wrapper
— (необязательно) Устанавливать ли оболочку для обертывания последующих вызовов двоичного файла terraform
и предоставлять его STDOUT, STDERR и код выхода как выходные данные с именами stdout
, stderr
и exitcode
соответственно. По умолчанию true
. Это действие не настраивает напрямую какие-либо выходы. Однако если для входных данных terraform_wrapper
установлено значение true
, для последующих шагов, вызывающих двоичный файл terraform
будут доступны следующие выходные данные:
stdout
— поток STDOUT вызова двоичного файла terraform
.stderr
— поток STDERR вызова двоичного файла terraform
.exitcode
— код завершения вызова двоичного файла terraform
. Публичная лицензия Mozilla v2.0
Нормы поведения
Используя программное обеспечение в этом репозитории («Программное обеспечение»), вы признаете, что: (1) Программное обеспечение все еще находится в разработке, может меняться, не было выпущено HashiCorp в качестве коммерческого продукта и в настоящее время не поддерживается каким-либо образом. ХашиКорп; (2) Программное обеспечение предоставляется «как есть» и может содержать ошибки, ошибки или другие проблемы; (3) Программное обеспечение НЕ ПРЕДНАЗНАЧЕНО ДЛЯ ПРОИЗВОДСТВЕННОГО ИСПОЛЬЗОВАНИЯ, использование Программного обеспечения может привести к неожиданным результатам, потере данных или другим неожиданным результатам, и HashiCorp отказывается от любой ответственности, возникающей в результате использования Программного обеспечения; и (4) HashiCorp оставляет за собой все права принимать все решения относительно функций, функциональности и коммерческого выпуска (или невыпуска) Программного обеспечения в любое время и без каких-либо обязательств или ответственности.
Все файлы исходного кода (за исключением автоматически созданных файлов, таких как package.json
, prose и файлов, исключенных из .copywrite.hcl) должны иметь заголовок лицензии вверху.
Его можно сгенерировать автоматически, установив инструмент copywrite
HashiCorp и запустив copywrite headers
в корне репозитория.