الإجراء hashicorp/setup-terraform
هو إجراء JavaScript يقوم بإعداد Terraform CLI في سير عمل GitHub Actions الخاص بك عن طريق:
PATH
.terraform
وكشف كود STDOUT وSTDERR ورمز الخروج الخاص به كمخرجات مسماة stdout
و stderr
و exitcode
على التوالي. (يمكن تخطي ذلك اختياريًا إذا كانت الخطوات اللاحقة في نفس المهمة لا تحتاج إلى الوصول إلى نتائج أوامر Terraform.) بعد استخدام الإجراء، يمكن للخطوات اللاحقة في نفس المهمة تشغيل أوامر Terraform عشوائية باستخدام بناء جملة run
GitHub Actions. يتيح ذلك لمعظم أوامر Terraform العمل تمامًا كما تفعل في سطر الأوامر المحلي لديك.
يمكن تشغيل هذا الإجراء على أحدث برامج التشغيل ubuntu-latest
و windows-latest
و macos-latest
GitHub Actions. عند التشغيل على نظام التشغيل windows-latest
يجب ضبط الصدفة على Bash. عند التشغيل على مشغلات GitHub Actions المستضافة ذاتيًا، يجب تثبيت 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
. رخصة موزيلا العامة v2.0
مدونة لقواعد السلوك
باستخدام البرنامج الموجود في هذا المستودع ("البرنامج")، فإنك تقر بما يلي: (1) البرنامج لا يزال قيد التطوير، وقد يتغير، ولم يتم إصداره كمنتج تجاري بواسطة HashiCorp وهو غير مدعوم حاليًا بأي شكل من الأشكال. بواسطة هاشي كورب؛ (2) يتم توفير البرنامج على أساس "كما هو"، وقد يتضمن أخطاء أو مشكلات أخرى؛ (3) البرنامج ليس مخصصًا للاستخدام في الإنتاج، وقد يؤدي استخدام البرنامج إلى نتائج غير متوقعة، أو فقدان البيانات، أو نتائج أخرى غير متوقعة، وتخلي HashiCorp مسؤوليتها عن أي وجميع المسؤوليات الناتجة عن استخدام البرنامج؛ و(4) تحتفظ HashiCorp بجميع الحقوق في اتخاذ جميع القرارات بشأن الميزات والوظائف والإصدار التجاري (أو عدم الإصدار) للبرنامج، في أي وقت ودون أي التزام أو مسؤولية على الإطلاق.
يجب أن تحتوي جميع ملفات التعليمات البرمجية المصدر (باستثناء الملفات التي تم إنشاؤها تلقائيًا مثل package.json
وprose والملفات المستبعدة في .copywrite.hcl) على رأس ترخيص في الأعلى.
يمكن إنشاء ذلك تلقائيًا عن طريق تثبيت أداة copywrite
HashiCorp وتشغيل copywrite headers
في جذر المستودع.