# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. name: "Tests" # yamllint disable-line rule:truthy on: push: branches: - master - fast-dev pull_request: branches: - master - fast-dev workflow_dispatch: inputs: terraform_version: description: "Use '1.5.7' to test last MPLv2 Terraform version" required: true default: 1.12.2 type: string env: GOOGLE_APPLICATION_CREDENTIALS: "/home/runner/credentials.json" PYTEST_ADDOPTS: "--color=yes" PYTHON_VERSION: "3.10" TF_PLUGIN_CACHE_DIR: "/home/runner/.terraform.d/plugin-cache" TFTEST_COPY: 1 DEFAULT_TERRAFORM_FLAVOUR: terraform DEFAULT_TERRAFORM_VERSION: ${{ inputs.terraform_version || '1.12.2' }} DEFAULT_TOFU_VERSION: "1.10.0" jobs: setup-tf-providers: runs-on: ubuntu-latest continue-on-error: true # run terraform tests, even if setup for tofu fails strategy: fail-fast: false matrix: include: - flavour: terraform - flavour: tofu steps: - uses: actions/checkout@v4 - name: Set Terraform versions run: | set -e -o xtrace if [[ ${{ matrix.flavour }} == 'terraform' ]] ; then echo TERRAFORM_VERSION=${DEFAULT_TERRAFORM_VERSION} | tee -a ${GITHUB_ENV} elif [[ ${{ matrix.flavour }} == 'tofu' ]] ; then echo TERRAFORM_VERSION=${{ env.DEFAULT_TOFU_VERSION }} | tee -a ${GITHUB_ENV} else echo TERRAFORM_VERSION=unkown_flavor | tee -a ${GITHUB_ENV} fi - uses: hashicorp/setup-terraform@v3 if: ${{ matrix.flavour == 'terraform' }} with: terraform_version: ${{ env.TERRAFORM_VERSION }} terraform_wrapper: false - uses: opentofu/setup-opentofu@v1 if: ${{ matrix.flavour == 'tofu' }} with: tofu_version: ${{ env.TERRAFORM_VERSION }} tofu_wrapper: false - name: Build lockfile and fetch providers shell: bash run: | mkdir -p ${{ env.TF_PLUGIN_CACHE_DIR }} echo 'plugin_cache_dir = "${{ env.TF_PLUGIN_CACHE_DIR }}"' | tee -a /home/runner/.terraformrc echo 'disable_checkpoint = true' | tee -a /home/runner/.terraformrc sed -i -e 's/>=\(.*# tftest\)/=\1/g' tools/lockfile/versions.tf tools/lockfile/versions.tofu # change terraform version to the one that is running sed -i 's/required_version = .*$/required_version = ">= ${TERRAFORM_VERSION}"/g' \ tools/lockfile/versions.tf cd tools/lockfile ${{ matrix.flavour }} init -upgrade=true - name: Upload Terraform provider cache uses: actions/cache@v4 with: path: ${{ env.TF_PLUGIN_CACHE_DIR }} # yamllint disable-line rule:line-length key: ${{ runner.os }}-${{ matrix.flavour }}-${{ env.TERRAFORM_VERSION }}-${{ hashFiles('tools/lockfile/.terraform.lock.hcl') }} - name: Upload lockfile uses: actions/upload-artifact@v4 with: name: lockfile-${{ runner.os }}-${{ matrix.flavour }}-${{ env.TERRAFORM_VERSION }} path: tools/lockfile/.terraform.lock.hcl overwrite: true include-hidden-files: true examples-project-templates: runs-on: ubuntu-latest needs: setup-tf-providers steps: - uses: actions/checkout@v4 - name: Call composite action fabric-tests uses: ./.github/actions/fabric-tests with: PYTHON_VERSION: ${{ env.PYTHON_VERSION }} TERRAFORM_VERSION: ${{ env.DEFAULT_TERRAFORM_VERSION }} TERRAFORM_FLAVOUR: ${{ env.DEFAULT_TERRAFORM_FLAVOUR }} - name: Run tests on documentation examples run: pytest -vv -n4 --tb=line --junit-xml=test-results-raw.xml -k fast/project-templates/ tests/examples - name: Create report uses: ./.github/actions/post-fabric-tests if: always() with: MODULE: Project Templates Examples examples-modules: runs-on: ubuntu-latest needs: - setup-tf-providers strategy: fail-fast: false matrix: include: - flavour: terraform - flavour: tofu steps: - uses: actions/checkout@v4 - name: Set Terraform versions run: | set -e -o xtrace if [[ ${{ matrix.flavour }} == 'terraform' ]] ; then echo TERRAFORM_VERSION=${DEFAULT_TERRAFORM_VERSION} | tee -a ${GITHUB_ENV} elif [[ ${{ matrix.flavour }} == 'tofu' ]] ; then echo TERRAFORM_VERSION=${{ env.DEFAULT_TOFU_VERSION }} | tee -a ${GITHUB_ENV} else echo TERRAFORM_VERSION=unkown_flavor | tee -a ${GITHUB_ENV} fi - name: Call composite action fabric-tests uses: ./.github/actions/fabric-tests with: PYTHON_VERSION: ${{ env.PYTHON_VERSION }} TERRAFORM_VERSION: ${{ env.TERRAFORM_VERSION }} TERRAFORM_FLAVOUR: ${{ matrix.flavour }} - name: Run tests on documentation examples env: TERRAFORM: ${{ matrix.flavour }} run: | pytest -vv ${{ matrix.flavour == 'terraform' && '-n4' || '-n4' }} --tb=line \ --junit-xml=test-results-raw.xml -k "terraform and modules/" tests/examples - name: Create report uses: ./.github/actions/post-fabric-tests if: always() with: MODULE: Module Examples modules: runs-on: ubuntu-latest needs: - setup-tf-providers strategy: fail-fast: false matrix: include: - flavour: terraform - flavour: tofu steps: - uses: actions/checkout@v4 - name: Set Terraform versions run: | set -e -o xtrace if [[ ${{ matrix.flavour }} == 'terraform' ]] ; then echo TERRAFORM_VERSION=${DEFAULT_TERRAFORM_VERSION} | tee -a ${GITHUB_ENV} elif [[ ${{ matrix.flavour }} == 'tofu' ]] ; then echo TERRAFORM_VERSION=${{ env.DEFAULT_TOFU_VERSION }} | tee -a ${GITHUB_ENV} else echo TERRAFORM_VERSION=unkown_flavor | tee -a ${GITHUB_ENV} fi - name: Call composite action fabric-tests uses: ./.github/actions/fabric-tests env: TERRAFORM: ${{ matrix.flavour }} with: PYTHON_VERSION: ${{ env.PYTHON_VERSION }} TERRAFORM_VERSION: ${{ env.TERRAFORM_VERSION }} TERRAFORM_FLAVOUR: ${{ matrix.flavour }} - name: Run tests modules env: TERRAFORM: ${{ matrix.flavour }} run: | pytest -vv ${{ matrix.flavour == 'terraform' && '-n4' || '-n4' }} --tb=line \ --junit-xml=test-results-raw.xml tests/modules - name: Create report uses: ./.github/actions/post-fabric-tests if: always() with: MODULE: Modules fast: runs-on: ubuntu-latest needs: setup-tf-providers strategy: fail-fast: false matrix: include: - flavour: terraform # - flavour: tofu # tofu fails to find the terraform binary for FAST tests steps: - uses: actions/checkout@v4 - name: Set Terraform versions run: | set -e -o xtrace if [[ ${{ matrix.flavour }} == 'terraform' ]] ; then echo TERRAFORM_VERSION=${DEFAULT_TERRAFORM_VERSION} | tee -a ${GITHUB_ENV} elif [[ ${{ matrix.flavour }} == 'tofu' ]] ; then echo TERRAFORM_VERSION=${{ env.DEFAULT_TOFU_VERSION }} | tee -a ${GITHUB_ENV} else echo TERRAFORM_VERSION=unkown_flavor | tee -a ${GITHUB_ENV} fi - name: Call composite action fabric-tests uses: ./.github/actions/fabric-tests with: PYTHON_VERSION: ${{ env.PYTHON_VERSION }} TERRAFORM_VERSION: ${{ env.TERRAFORM_VERSION }} TERRAFORM_FLAVOUR: ${{ matrix.flavour }} - name: Run tests on FAST stages run: pytest -vv -n4 --tb=line --junit-xml=test-results-raw.xml tests/fast - name: Create report uses: ./.github/actions/post-fabric-tests if: always() with: MODULE: FAST schemas: runs-on: ubuntu-latest needs: setup-tf-providers steps: - uses: actions/checkout@v4 - name: Call composite action fabric-tests uses: ./.github/actions/fabric-tests with: PYTHON_VERSION: ${{ env.PYTHON_VERSION }} TERRAFORM_VERSION: ${{ env.DEFAULT_TERRAFORM_VERSION }} TERRAFORM_FLAVOUR: ${{ env.DEFAULT_TERRAFORM_FLAVOUR }} - name: Run schema tests run: | pytest -vv --tb=line --junit-xml=test-results-raw.xml \ -k "(tests and schemas) or (fast and schema) or (examples and yaml)" - name: Create report uses: ./.github/actions/post-fabric-tests if: always() with: MODULE: Schemas