From ef28e208d3f119954685e1d88766ec67c1fc9f5d Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Mon, 6 Mar 2023 11:44:57 +0100 Subject: [PATCH] Use composite action for test workflow prerequisite steps (#1216) * test composite action * add shell in action steps * home input * boilerplate * static home * use action in all test steps * fix step name --- .github/actions/fabric-tests/action.yml | 55 ++++++++ .github/workflows/tests.yml | 176 +++--------------------- 2 files changed, 75 insertions(+), 156 deletions(-) create mode 100644 .github/actions/fabric-tests/action.yml diff --git a/.github/actions/fabric-tests/action.yml b/.github/actions/fabric-tests/action.yml new file mode 100644 index 00000000..df5b1bd0 --- /dev/null +++ b/.github/actions/fabric-tests/action.yml @@ -0,0 +1,55 @@ +# Copyright 2023 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: fabric-tests +description: Set up Fabric testing environment +inputs: + PYTHON_VERSION: + required: true + TERRAFORM_VERSION: + required: true +runs: + using: composite + steps: + - name: Config auth + shell: bash + run: | + echo '{"type": "service_account", "project_id": "test-only"}' \ + | tee -a $GOOGLE_APPLICATION_CREDENTIALS + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{ inputs.PYTHON_VERSION }} + cache: 'pip' + cache-dependency-path: 'tests/requirements.txt' + - name: Set up Terraform + uses: hashicorp/setup-terraform@v2 + with: + terraform_version: ${{ inputs.TERRAFORM_VERSION }} + terraform_wrapper: false + - name: Configure provider cache + shell: bash + run: | + echo 'plugin_cache_dir = "/home/runner/.terraform.d/plugin-cache"' \ + | tee -a /home/runner/.terraformrc + echo 'disable_checkpoint = true' \ + | tee -a /home/runner/.terraformrc + mkdir -p /home/runner/.terraform.d/plugin-cache + # avoid conflicts with user-installed providers on local machines + - name: Pin provider versions + shell: bash + run: | + for f in $(find . -name versions.tf); do + sed -i 's/>=\(.*# tftest\)/=\1/g' $f; + done diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 22f33645..5614b048 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -36,43 +36,15 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Config auth - run: | - echo '{"type": "service_account", "project_id": "test-only"}' \ - | tee -a $GOOGLE_APPLICATION_CREDENTIALS - - - name: Set up Python - uses: actions/setup-python@v4 + - name: Call composite action fabric-tests + uses: ./.github/actions/fabric-tests with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - cache-dependency-path: 'tests/requirements.txt' - - - name: Set up Terraform - uses: hashicorp/setup-terraform@v2 - with: - terraform_version: ${{ env.TF_VERSION }} - terraform_wrapper: false - - - name: Configure provider cache - run: | - echo 'plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"' \ - | tee -a $HOME/.terraformrc - echo 'disable_checkpoint = true' \ - | tee -a $HOME/.terraformrc - mkdir -p $HOME/.terraform.d/plugin-cache - - # avoid conflicts with user-installed providers on local machines - - name: Pin provider versions - run: | - for f in $(find . -name versions.tf); do - sed -i 's/>=\(.*# tftest\)/=\1/g' $f; - done + PYTHON_VERSION: ${{ env.PYTHON_VERSION }} + TERRAFORM_VERSION: ${{ env.TERRAFORM_VERSION }} - name: Run tests on documentation examples id: pytest run: | - mkdir -p ${{ env.TF_PLUGIN_CACHE_DIR }} pip install -r tests/requirements.txt pytest -vv -k blueprints/ tests/examples @@ -81,38 +53,11 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Config auth - run: | - echo '{"type": "service_account", "project_id": "test-only"}' \ - | tee -a $GOOGLE_APPLICATION_CREDENTIALS - - - name: Set up Python - uses: actions/setup-python@v4 + - name: Call composite action fabric-tests + uses: ./.github/actions/fabric-tests with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - cache-dependency-path: 'tests/requirements.txt' - - - name: Set up Terraform - uses: hashicorp/setup-terraform@v2 - with: - terraform_version: ${{ env.TF_VERSION }} - terraform_wrapper: false - - - name: Configure provider cache - run: | - echo 'plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"' \ - | tee -a $HOME/.terraformrc - echo 'disable_checkpoint = true' \ - | tee -a $HOME/.terraformrc - mkdir -p $HOME/.terraform.d/plugin-cache - - # avoid conflicts with user-installed providers on local machines - - name: Pin provider versions - run: | - for f in $(find . -name versions.tf); do - sed -i 's/>=\(.*# tftest\)/=\1/g' $f; - done + PYTHON_VERSION: ${{ env.PYTHON_VERSION }} + TERRAFORM_VERSION: ${{ env.TERRAFORM_VERSION }} - name: Run tests on documentation examples id: pytest @@ -126,38 +71,11 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Config auth - run: | - echo '{"type": "service_account", "project_id": "test-only"}' \ - | tee -a $GOOGLE_APPLICATION_CREDENTIALS - - - name: Set up Python - uses: actions/setup-python@v4 + - name: Call composite action fabric-tests + uses: ./.github/actions/fabric-tests with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - cache-dependency-path: 'tests/requirements.txt' - - - name: Set up Terraform - uses: hashicorp/setup-terraform@v2 - with: - terraform_version: ${{ env.TF_VERSION }} - terraform_wrapper: false - - - name: Configure provider cache - run: | - echo 'plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"' \ - | tee -a $HOME/.terraformrc - echo 'disable_checkpoint = true' \ - | tee -a $HOME/.terraformrc - mkdir -p $HOME/.terraform.d/plugin-cache - - # avoid conflicts with user-installed providers on local machines - - name: Pin provider versions - run: | - for f in $(find . -name versions.tf); do - sed -i 's/>=\(.*# tftest\)/=\1/g' $f; - done + PYTHON_VERSION: ${{ env.PYTHON_VERSION }} + TERRAFORM_VERSION: ${{ env.TERRAFORM_VERSION }} - name: Run tests environments id: pytest @@ -171,38 +89,11 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Config auth - run: | - echo '{"type": "service_account", "project_id": "test-only"}' \ - | tee -a $GOOGLE_APPLICATION_CREDENTIALS - - - name: Set up Python - uses: actions/setup-python@v4 + - name: Call composite action fabric-tests + uses: ./.github/actions/fabric-tests with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - cache-dependency-path: 'tests/requirements.txt' - - - name: Set up Terraform - uses: hashicorp/setup-terraform@v2 - with: - terraform_version: ${{ env.TF_VERSION }} - terraform_wrapper: false - - - name: Configure provider cache - run: | - echo 'plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"' \ - | tee -a $HOME/.terraformrc - echo 'disable_checkpoint = true' \ - | tee -a $HOME/.terraformrc - mkdir -p $HOME/.terraform.d/plugin-cache - - # avoid conflicts with user-installed providers on local machines - - name: Pin provider versions - run: | - for f in $(find . -name versions.tf); do - sed -i 's/>=\(.*# tftest\)/=\1/g' $f; - done + PYTHON_VERSION: ${{ env.PYTHON_VERSION }} + TERRAFORM_VERSION: ${{ env.TERRAFORM_VERSION }} - name: Run tests modules id: pytest @@ -216,38 +107,11 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Config auth - run: | - echo '{"type": "service_account", "project_id": "test-only"}' \ - | tee -a $GOOGLE_APPLICATION_CREDENTIALS - - - name: Set up Python - uses: actions/setup-python@v4 + - name: Call composite action fabric-tests + uses: ./.github/actions/fabric-tests with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' - cache-dependency-path: 'tests/requirements.txt' - - - name: Set up Terraform - uses: hashicorp/setup-terraform@v2 - with: - terraform_version: ${{ env.TF_VERSION }} - terraform_wrapper: false - - - name: Configure provider cache - run: | - echo 'plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"' \ - | tee -a $HOME/.terraformrc - echo 'disable_checkpoint = true' \ - | tee -a $HOME/.terraformrc - mkdir -p $HOME/.terraform.d/plugin-cache - - # avoid conflicts with user-installed providers on local machines - - name: Pin provider versions - run: | - for f in $(find . -name versions.tf); do - sed -i 's/>=\(.*# tftest\)/=\1/g' $f; - done + PYTHON_VERSION: ${{ env.PYTHON_VERSION }} + TERRAFORM_VERSION: ${{ env.TERRAFORM_VERSION }} - name: Run tests on FAST stages id: pytest