# Copyright 2024 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" on: # schedule: # - cron: "45 2 * * *" pull_request: branches: - master workflow_dispatch: inputs: terraform_version: description: "Use '1.5.7' to test last MPLv2 Terraform version" required: true default: 1.7.4 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.7.4' }} DEFAULT_TOFU_VERSION: "1.7.2" jobs: compute-matrix: runs-on: ubuntu-latest outputs: DEFAULT_TERRAFORM_FLAVOUR: ${{ env.DEFAULT_TERRAFORM_FLAVOUR }} DEFAULT_TERRAFORM_VERSION: ${{ env.DEFAULT_TERRAFORM_VERSION }} DEFAULT_TOFU_VERSION: ${{ env.DEFAULT_TOFU_VERSION }} steps: - name: dummy run: echo setup-tf-providers: runs-on: ubuntu-latest needs: - compute-matrix strategy: matrix: include: - flavour: terraform version: "${{ needs.compute-matrix.outputs.DEFAULT_TERRAFORM_VERSION }}" - flavour: tofu version: "${{ needs.compute-matrix.outputs.DEFAULT_TOFU_VERSION }}" steps: - uses: actions/checkout@v4 - uses: hashicorp/setup-terraform@v3 if: ${{ matrix.flavour == 'terraform' }} with: terraform_version: ${{ matrix.version }} terraform_wrapper: false - uses: opentofu/setup-opentofu@v1 if: ${{ matrix.flavour == 'tofu' }} with: tofu_version: ${{ matrix.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 cp default-versions.tf tools/lockfile sed -i -e 's/>=\(.*# tftest\)/=\1/g' tools/lockfile/default-versions.tf # change terraform version to the one that is running sed -i 's/required_version = .*$/required_version = ">= ${{ matrix.version }}"/g' tools/lockfile/default-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 }} key: ${{ runner.os }}-${{ matrix.flavour }}-${{ matrix.version }}-${{ hashFiles('tools/lockfile/.terraform.lock.hcl') }} - name: Upload lockfile uses: actions/upload-artifact@v4 with: name: lockfile-${{ runner.os }}-${{ matrix.flavour }}-${{ matrix.version }} path: tools/lockfile/.terraform.lock.hcl overwrite: true examples-blueprints: 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 blueprints/ tests/examples - name: Create report uses: ./.github/actions/post-fabric-tests if: always() with: MODULE: Blueprint Examples examples-modules: runs-on: ubuntu-latest needs: - setup-tf-providers - compute-matrix strategy: matrix: include: - flavour: terraform version: "${{ needs.compute-matrix.outputs.DEFAULT_TERRAFORM_VERSION }}" - flavour: tofu version: "${{ needs.compute-matrix.outputs.DEFAULT_TOFU_VERSION }}" steps: - uses: actions/checkout@v4 - name: Call composite action fabric-tests uses: ./.github/actions/fabric-tests with: PYTHON_VERSION: ${{ env.PYTHON_VERSION }} TERRAFORM_VERSION: ${{ matrix.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 modules/ tests/examples - name: Create report uses: ./.github/actions/post-fabric-tests if: always() with: MODULE: Module Examples blueprints: 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 environments run: pytest -vv -n4 --tb=line --junit-xml=test-results-raw.xml tests/blueprints - name: Create report uses: ./.github/actions/post-fabric-tests if: always() with: MODULE: Blueprints modules: runs-on: ubuntu-latest needs: - setup-tf-providers - compute-matrix strategy: matrix: include: - flavour: terraform version: "${{ needs.compute-matrix.outputs.DEFAULT_TERRAFORM_VERSION }}" - flavour: tofu version: "${{ needs.compute-matrix.outputs.DEFAULT_TOFU_VERSION }}" steps: - uses: actions/checkout@v4 - name: Call composite action fabric-tests uses: ./.github/actions/fabric-tests env: TERRAFORM: ${{ matrix.flavour }} with: PYTHON_VERSION: ${{ env.PYTHON_VERSION }} TERRAFORM_VERSION: ${{ matrix.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 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 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