hashicorp/setup-terraform
アクションは、GitHub Actions ワークフローで Terraform CLI をセットアップする JavaScript アクションです。
PATH
に追加します。terraform
バイナリの後続の呼び出しをラップし、その STDOUT、STDERR、および終了コードを、それぞれstdout
、 stderr
、およびexitcode
という名前の出力として公開します。 (同じジョブの後続のステップで Terraform コマンドの結果にアクセスする必要がない場合、これはオプションでスキップできます。)アクションを使用した後、同じジョブの後続のステップで、GitHub アクションrun
構文を使用して任意の Terraform コマンドを実行できます。これにより、ほとんどの Terraform コマンドがローカルのコマンド ラインとまったく同じように機能するようになります。
このアクションはubuntu-latest
、 windows-latest
、およびmacos-latest
GitHub Actions ランナーで実行できます。 windows-latest
で実行する場合、シェルは Bash に設定する必要があります。セルフホスト型 GitHub Actions ランナーで実行する場合は、 action.yml
で指定されたバージョンで NodeJS を事前にインストールする必要があります。
デフォルト構成では、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)。
この制限により、計画が成功した場合でも、ワークフローの実行が失敗する可能性があります。
もう 1 つの方法は、マークダウンをサポートする $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
- (オプション) Terraform CLI 構成ファイルの資格情報ブロック内に配置する HCP Terraform/Terraform Enterprise インスタンスのホスト名。デフォルトはapp.terraform.io
です。cli_config_credentials_token
- (オプション) Terraform CLI 構成ファイルの資格情報ブロック内に配置する HCP Terraform/Terraform Enterprise インスタンスの API トークン。terraform_version
- (オプション) インストールする Terraform CLI のバージョン。完全なバージョン文字列の代わりに、制約文字列を指定することもできます (利用可能な範囲の指定については、「Semver Ranges」を参照してください)。例: "<1.2.0"
、 "~1.1.0"
、 "1.1.7"
(これら 3 つはすべて、利用可能な最新の1.1
バージョンをインストールします)。プレリリース バージョンを指定でき、範囲はbeta
やrc
などの指定されたタグ内に留まります。バージョンが指定されていない場合は、デフォルトでlatest
が使用されます。terraform_wrapper
- (オプション) terraform
バイナリの後続の呼び出しをラップし、その STDOUT、STDERR、および終了コードをそれぞれstdout
、 stderr
、およびexitcode
名前の出力として公開するラッパーをインストールするかどうか。デフォルトはtrue
です。 このアクションは出力を直接構成しません。ただし、 terraform_wrapper
入力をtrue
に設定すると、 terraform
バイナリを呼び出す後続のステップで次の出力を使用できます。
stdout
- terraform
バイナリへの呼び出しの STDOUT ストリーム。stderr
- terraform
バイナリへの呼び出しの STDERR ストリーム。exitcode
- terraform
バイナリへの呼び出しの終了コード。 Mozilla パブリック ライセンス v2.0
行動規範
このリポジトリ内のソフトウェア (「ソフトウェア」) を使用することにより、お客様は次のことを承認するものとします: (1) ソフトウェアはまだ開発中であり、変更される可能性があり、HashiCorp によって商用製品としてリリースされておらず、現在いかなる形でもサポートされていません。ハシコープ著。 (2) ソフトウェアは「現状のまま」で提供され、バグ、エラー、その他の問題が含まれる場合があります。 (3) ソフトウェアは実稼働での使用を目的としたものではなく、ソフトウェアの使用により予期せぬ結果、データの損失、またはその他の予期しない結果が生じる可能性があり、HashiCorp はソフトウェアの使用から生じる一切の責任を負いません。 (4) HashiCorp は、ソフトウェアの機能、機能性、商用リリース (または非リリース) に関するあらゆる決定を、いつでも、いかなる義務も責任も負うことなく行うすべての権利を留保します。
すべてのソース コード ファイル ( package.json
、 prose などの自動生成ファイル、および .copywrite.hcl で除外されたファイルを除く) の先頭にはライセンス ヘッダーが必要です。
これは、HashiCorp copywrite
ツールをインストールし、リポジトリのルートでcopywrite headers
実行することで自動生成できます。