Tindakan hashicorp/setup-terraform
adalah tindakan JavaScript yang menyiapkan Terraform CLI di alur kerja GitHub Actions Anda dengan:
PATH
.terraform
dan mengekspos STDOUT, STDERR, dan kode keluarnya sebagai keluaran masing-masing bernama stdout
, stderr
, dan exitcode
. (Ini secara opsional dapat dilewati jika langkah selanjutnya dalam pekerjaan yang sama tidak perlu mengakses hasil perintah Terraform.) Setelah Anda menggunakan tindakan tersebut, langkah selanjutnya dalam pekerjaan yang sama dapat menjalankan perintah Terraform arbitrer menggunakan sintaksis run
GitHub Actions. Hal ini memungkinkan sebagian besar perintah Terraform bekerja persis seperti pada baris perintah lokal Anda.
Tindakan ini dapat dijalankan pada runner GitHub Actions ubuntu-latest
, windows-latest
, dan macos-latest
. Saat berjalan di windows-latest
shell harus disetel ke Bash. Saat dijalankan pada runner GitHub Actions yang dihosting sendiri, NodeJS harus diinstal sebelumnya dengan versi yang ditentukan dalam action.yml
.
Konfigurasi default akan menginstal versi terbaru Terraform CLI dan menginstal skrip wrapper untuk menyelesaikan panggilan berikutnya ke biner terraform
:
steps :
- uses : hashicorp/setup-terraform@v3
Versi spesifik Terraform CLI dapat diinstal:
steps :
- uses : hashicorp/setup-terraform@v3
with :
terraform_version : " 1.1.7 "
Kredensial untuk HCP Terraform (app.terraform.io) dapat dikonfigurasi:
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
Kredensial untuk Terraform Enterprise (TFE) dapat dikonfigurasi:
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_hostname : ' terraform.example.com '
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
Instalasi skrip wrapper dapat dilewati dengan menyetel variabel terraform_wrapper
ke false
:
steps :
- uses : hashicorp/setup-terraform@v3
with :
terraform_wrapper : false
Langkah selanjutnya dapat mengakses output ketika skrip wrapper diinstal:
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 }}
Output dapat digunakan pada langkah selanjutnya untuk mengomentari permintaan penarikan:
Pemberitahuan: Ada batasan jumlah karakter di dalam komentar GitHub (65535).
Karena keterbatasan itu, Anda mungkin akan mengalami kegagalan alur kerja meskipun rencana berhasil.
Pendekatan lain adalah dengan menambahkan rencana Anda ke dalam variabel lingkungan $GITHUB_STEP_SUMMARY yang mendukung penurunan harga.
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
})
Daripada membuat komentar baru setiap saat, Anda juga dapat memperbarui komentar yang sudah ada:
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
})
}
Tindakan ini mendukung masukan berikut:
cli_config_credentials_hostname
- (opsional) Nama host instance HCP Terraform/Terraform Enterprise yang akan ditempatkan dalam blok kredensial file konfigurasi Terraform CLI. Defaultnya adalah app.terraform.io
.cli_config_credentials_token
- (opsional) Token API untuk instance HCP Terraform/Terraform Enterprise untuk ditempatkan dalam blok kredensial file konfigurasi Terraform CLI.terraform_version
- (opsional) Versi Terraform CLI yang akan diinstal. Selain string versi lengkap, Anda juga dapat menentukan string batasan (lihat Rentang Semver untuk spesifikasi rentang yang tersedia). Contohnya adalah: "<1.2.0"
, "~1.1.0"
, "1.1.7"
(ketiganya menginstal versi 1.1
terbaru yang tersedia). Versi prarilis dapat ditentukan dan rentangnya akan tetap berada dalam tag yang diberikan seperti beta
atau rc
. Jika tidak ada versi yang diberikan, versi defaultnya adalah latest
.terraform_wrapper
- (opsional) Apakah akan memasang wrapper untuk membungkus panggilan berikutnya dari biner terraform
dan mengekspos STDOUT, STDERR, dan kode keluarnya sebagai output masing-masing bernama stdout
, stderr
, dan exitcode
. Defaultnya adalah true
. Tindakan ini tidak mengonfigurasi keluaran apa pun secara langsung. Namun, bila Anda menyetel masukan terraform_wrapper
ke true
, keluaran berikut tersedia untuk langkah selanjutnya yang memanggil biner terraform
:
stdout
- Aliran STDOUT dari panggilan ke biner terraform
.stderr
- Aliran STDERR dari panggilan ke biner terraform
.exitcode
- Kode keluar dari panggilan ke biner terraform
. Lisensi Publik Mozilla v2.0
Kode Etik
Dengan menggunakan perangkat lunak dalam repositori ini (“Perangkat Lunak”), Anda mengakui bahwa: (1) Perangkat Lunak masih dalam pengembangan, dapat berubah, dan belum dirilis sebagai produk komersial oleh HashiCorp dan saat ini tidak didukung dengan cara apa pun. oleh HashiCorp; (2) Perangkat Lunak disediakan "sebagaimana adanya", dan mungkin berisi bug, kesalahan, atau masalah lainnya; (3) Perangkat Lunak TIDAK DIMAKSUDKAN UNTUK PENGGUNAAN PRODUKSI, penggunaan Perangkat Lunak dapat mengakibatkan hasil yang tidak diharapkan, kehilangan data, atau hasil yang tidak diharapkan lainnya, dan HashiCorp menafikan setiap dan seluruh tanggung jawab akibat penggunaan Perangkat Lunak; dan (4) HashiCorp berhak mengambil semua keputusan tentang fitur, fungsi, dan rilis komersial (atau non-rilis) Perangkat Lunak, kapan pun dan tanpa kewajiban atau tanggung jawab apa pun.
Semua file kode sumber (tidak termasuk file yang dibuat secara otomatis seperti package.json
, prosa, dan file yang dikecualikan dalam .copywrite.hcl) harus memiliki header lisensi di bagian atas.
Ini dapat dibuat secara otomatis dengan menginstal alat copywrite
HashiCorp dan menjalankan copywrite headers
di root repositori.