L'action hashicorp/setup-terraform
est une action JavaScript qui configure Terraform CLI dans votre workflow GitHub Actions en :
PATH
.terraform
et exposer ses STDOUT, STDERR et son code de sortie en tant que sorties nommées stdout
, stderr
et exitcode
respectivement. (Cela peut éventuellement être ignoré si les étapes suivantes de la même tâche n'ont pas besoin d'accéder aux résultats des commandes Terraform.) Une fois que vous avez utilisé l'action, les étapes suivantes de la même tâche peuvent exécuter des commandes Terraform arbitraires à l'aide de la syntaxe run
des actions GitHub. Cela permet à la plupart des commandes Terraform de fonctionner exactement comme elles le font sur votre ligne de commande locale.
Cette action peut être exécutée sur les exécuteurs d'actions GitHub ubuntu-latest
, windows-latest
et macos-latest
. Lors de l'exécution sous windows-latest
le shell doit être défini sur Bash. Lors de l'exécution sur des exécuteurs GitHub Actions auto-hébergés, NodeJS doit être préalablement installé avec la version spécifiée dans action.yml
.
La configuration par défaut installe la dernière version de Terraform CLI et installe le script wrapper pour encapsuler les appels ultérieurs au binaire terraform
:
steps :
- uses : hashicorp/setup-terraform@v3
Une version spécifique de Terraform CLI peut être installée :
steps :
- uses : hashicorp/setup-terraform@v3
with :
terraform_version : " 1.1.7 "
Les informations d'identification pour HCP Terraform (app.terraform.io) peuvent être configurées :
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
Les informations d'identification pour Terraform Enterprise (TFE) peuvent être configurées :
steps :
- uses : hashicorp/setup-terraform@v3
with :
cli_config_credentials_hostname : ' terraform.example.com '
cli_config_credentials_token : ${{ secrets.TF_API_TOKEN }}
L'installation du script wrapper peut être ignorée en définissant la variable terraform_wrapper
sur false
:
steps :
- uses : hashicorp/setup-terraform@v3
with :
terraform_wrapper : false
Les étapes suivantes peuvent accéder aux sorties lorsque le script wrapper est installé :
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 }}
Les résultats peuvent être utilisés dans les étapes suivantes pour commenter la demande d'extraction :
Remarque : Il existe une limite au nombre de caractères dans un commentaire GitHub (65 535).
En raison de cette limitation, vous risquez de vous retrouver avec une exécution de flux de travail qui échoue même si le plan réussit.
Une autre approche consiste à ajouter votre plan dans la variable d'environnement $GITHUB_STEP_SUMMARY qui prend en charge la démarque.
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
})
Au lieu de créer un nouveau commentaire à chaque fois, vous pouvez également mettre à jour un commentaire existant :
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
})
}
L'action prend en charge les entrées suivantes :
cli_config_credentials_hostname
- (facultatif) Le nom d'hôte d'une instance HCP Terraform/Terraform Enterprise à placer dans le bloc d'informations d'identification du fichier de configuration Terraform CLI. La valeur par défaut est app.terraform.io
.cli_config_credentials_token
- (facultatif) Le jeton API pour une instance HCP Terraform/Terraform Enterprise à placer dans le bloc d'informations d'identification du fichier de configuration Terraform CLI.terraform_version
- (facultatif) La version de Terraform CLI à installer. Au lieu d'une chaîne de version complète, vous pouvez également spécifier une chaîne de contrainte (voir Plages Semver pour les spécifications de plage disponibles). Exemples : "<1.2.0"
, "~1.1.0"
, "1.1.7"
(tous trois installant la dernière version 1.1
disponible). Des versions préliminaires peuvent être spécifiées et une plage restera dans la balise donnée, telle que beta
ou rc
. Si aucune version n'est indiquée, la valeur par défaut sera latest
.terraform_wrapper
- (facultatif) S'il faut installer un wrapper pour encapsuler les appels ultérieurs du binaire terraform
et exposer ses STDOUT, STDERR et son code de sortie en tant que sorties nommées stdout
, stderr
et exitcode
respectivement. La valeur par défaut est true
. Cette action ne configure directement aucune sortie. Cependant, lorsque vous définissez l'entrée terraform_wrapper
sur true
, les sorties suivantes sont disponibles pour les étapes suivantes qui appellent le binaire terraform
:
stdout
- Le flux STDOUT de l'appel au binaire terraform
.stderr
- Le flux STDERR de l'appel au binaire terraform
.exitcode
- Le code de sortie de l'appel au binaire terraform
. Licence publique Mozilla v2.0
Code de conduite
En utilisant le logiciel de ce référentiel (le « Logiciel »), vous reconnaissez que : (1) le Logiciel est toujours en développement, peut changer et n'a pas été publié en tant que produit commercial par HashiCorp et n'est actuellement pris en charge d'aucune manière. par HashiCorp ; (2) le Logiciel est fourni « tel quel » et peut inclure des bogues, des erreurs ou d'autres problèmes ; (3) le logiciel n'est PAS DESTINÉ À UNE UTILISATION EN PRODUCTION, l'utilisation du logiciel peut entraîner des résultats inattendus, une perte de données ou d'autres résultats inattendus, et HashiCorp décline toute responsabilité résultant de l'utilisation du logiciel ; et (4) HashiCorp se réserve tous les droits de prendre toutes les décisions concernant les caractéristiques, les fonctionnalités et la sortie commerciale (ou la non-sortie) du logiciel, à tout moment et sans aucune obligation ou responsabilité de quelque nature que ce soit.
Tous les fichiers de code source (à l'exclusion des fichiers générés automatiquement comme package.json
, prose et les fichiers exclus dans .copywrite.hcl) doivent avoir un en-tête de licence en haut.
Cela peut être généré automatiquement en installant l'outil copywrite
HashiCorp et en exécutant copywrite headers
à la racine du référentiel.