diff --git a/.github/workflows/data/failure/main.tf b/.github/workflows/data/failure/main.tf new file mode 100644 index 00000000..b170433c --- /dev/null +++ b/.github/workflows/data/failure/main.tf @@ -0,0 +1,7 @@ +resource "random_pet" "pet" { + 1invalid_key= "" +} + +output "pet" { + value = random_pet.pet.id +} diff --git a/.github/workflows/setup-terraform.yml b/.github/workflows/setup-terraform.yml index 6b172cbf..396f7b4b 100644 --- a/.github/workflows/setup-terraform.yml +++ b/.github/workflows/setup-terraform.yml @@ -270,7 +270,38 @@ jobs: - name: Terraform Plan id: plan - run: terraform plan + run: terraform plan -detailed-exitcode + + - name: Print Terraform Plan + run: echo "${{ steps.plan.outputs.stdout }}" + + terraform-run-local-failures: + name: 'Terraform Run Local Failures' + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + defaults: + run: + shell: bash + working-directory: ./.github/workflows/data/failure + steps: + - name: Checkout + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + + - name: Setup Terraform + uses: ./ + + # coerce initial command exit code in order to verify it did fail + - name: Terraform Init + run: terraform init || $(exit 10) && $(exit 1) || [ $? -eq 10 ] + + - name: Terraform Format + run: terraform fmt -check || $(exit 10) && $(exit 1) || [ $? -eq 10 ] + + - name: Terraform Plan + id: plan + run: terraform plan -detailed-exitcode || $(exit 10) && $(exit 1) || [ $? -eq 10 ] - name: Print Terraform Plan run: echo "${{ steps.plan.outputs.stdout }}" diff --git a/dist/index1.js b/dist/index1.js index c6f4bdd3..9f83c9fa 100755 --- a/dist/index1.js +++ b/dist/index1.js @@ -27973,7 +27973,8 @@ async function checkTerraform () { core.setOutput('stderr', stderr.contents); core.setOutput('exitcode', exitCode.toString(10)); - if (exitCode === 0 || exitCode === 2) { + const usingDetailedExitcode = args.filter(arg => arg.toLowerCase().endsWith('-detailed-exitcode')).length > 0; + if (exitCode === 0 || (exitCode === 2 && usingDetailedExitcode)) { // A exitCode of 0 is considered a success // An exitCode of 2 may be returned when the '-detailed-exitcode' option // is passed to plan. This denotes Success with non-empty diff --git a/wrapper/terraform.js b/wrapper/terraform.js index 7350dc45..a3291f47 100755 --- a/wrapper/terraform.js +++ b/wrapper/terraform.js @@ -43,7 +43,8 @@ async function checkTerraform () { core.setOutput('stderr', stderr.contents); core.setOutput('exitcode', exitCode.toString(10)); - if (exitCode === 0 || exitCode === 2) { + const usingDetailedExitcode = args.filter(arg => arg.toLowerCase().endsWith('-detailed-exitcode')).length > 0; + if (exitCode === 0 || (exitCode === 2 && usingDetailedExitcode)) { // A exitCode of 0 is considered a success // An exitCode of 2 may be returned when the '-detailed-exitcode' option // is passed to plan. This denotes Success with non-empty