Skip to content

Acceptance test

Acceptance test #35

name: PowerVS Acceptance Tests
on:
pull_request:
paths:
- 'ibm/service/power/*.go' # Trigger only when test files within power are changed
types: [opened, synchronize, reopened]
jobs:
acceptance-test:
runs-on: ubuntu-latest
if: ${{ github.repository == 'powervs-ibm/terraform-provider-ibm'}}
steps:
# Step 1: Checkout code
- name: Checkout code
uses: actions/checkout@v3
# Step 2: Set up Go environment
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: '1.22'
# Step 3: Cache Go modules
- name: Cache Go modules
uses: actions/cache@v3
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod', '**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
# Step 4: Install dependencies
- name: Install dependencies
run: |
go mod tidy
go mod download
# Step 5 : Find modified files, set environment variables, and run tests
- name: Find modified files and run acceptance tests
run: |
# Process test files
mkdir -p test-results
declare -A modified_test_files_map
# Get the list of modified Go files in the PR under the ibm/service/power directory
git fetch origin -q
modified_go_files=$(git diff --name-only origin/${{ github.event.pull_request.base.ref }} -- 'ibm/service/power/*.go')
echo "Modified files: $modified_go_files"
# Initialize an empty list for test files
modified_test_files=""
# Loop through modified Go files to identify corresponding test files
for file in $modified_go_files; do
# Skip constants.go since it has no corresponding test file
if [[ "$file" == "ibm/service/power/ibm_pi_constants.go" ]]; then
echo "Skipping ibm_pi_constants.go as it has no test file."
continue
fi
echo "Processing file: $file"
if [[ "$file" == *_test.go ]]; then
echo "Adding $file to the list map"
modified_test_files_map["$file"]=1
else
# Get the test file corresponding to the modified Go file by replacing .go with _test.go
test_file="${file%.go}_test.go"
# If the test file exists, add it to the list of test files to run
if [ -f "$test_file" ]; then
modified_test_files_map["$test_file"]=1
fi
fi
done
# If there are modified test files, run the tests
if [ ${#modified_test_files_map[@]} -gt 0 ]; then
modified_test_files=$(echo "${!modified_test_files_map[@]}")
echo "Modified test files: $modified_test_files"
go test -v -tags=all -test.v -test.run '^TestAcc' $modified_test_files 2>&1 | tee test-results/test-report.log
if grep -q 'FAIL' test-results/test-report.log; then
exit 1
fi
else
echo "No modified test files detected."
fi
env:
TF_ACC: ${{ secrets.TF_ACC }}
TF_CLI_ARGS_plan: ${{ secrets.TF_CLI_ARGS_plan }}
TF_CLI_ARGS_apply: ${{ secrets.TF_CLI_ARGS_apply }}
IC_API_KEY: ${{ secrets.IC_API_KEY }}
IAAS_CLASSIC_API_KEY: ${{ secrets.IAAS_CLASSIC_API_KEY }}
IAAS_CLASSIC_USERNAME: ${{ secrets.IAAS_CLASSIC_USERNAME }}
# Endpoints
IBMCLOUD_PI_API_ENDPOINT: ${{ vars.IBMCLOUD_PI_API_ENDPOINT }}
IBMCLOUD_IAM_API_ENDPOINT: ${{ vars.IBMCLOUD_IAM_API_ENDPOINT }}
IBMCLOUD_RESOURCE_CATALOG_API_ENDPOINT: ${{ vars.IBMCLOUD_RESOURCE_CATALOG_API_ENDPOINT }}
IBMCLOUD_RESOURCE_MANAGEMENT_API_ENDPOINT: ${{ vars.IBMCLOUD_RESOURCE_MANAGEMENT_API_ENDPOINT }}
IBMCLOUD_RESOURCE_CONTROLLER_API_ENDPOINT: ${{ vars.IBMCLOUD_RESOURCE_CONTROLLER_API_ENDPOINT }}
IBMCLOUD_GS_API_ENDPOINT: ${{ vars.IBMCLOUD_GS_API_ENDPOINT }}
IBMCLOUD_GT_API_ENDPOINT: ${{ vars.IBMCLOUD_GT_API_ENDPOINT }}
# Power
PI_CLOUDINSTANCE_ID: ${{ secrets.PI_CLOUDINSTANCE_ID }}
IBMCLOUD_REGION: ${{ secrets.IBMCLOUD_REGION }}
IBMCLOUD_ZONE: ${{ secrets.IBMCLOUD_ZONE }}
# Step 6: Display Test Results
- name: Display Test Results
run: |
echo "Test Results:"
grep -E '^(=== RUN|--- PASS|--- FAIL|PASS|FAIL)' test-results/test-report.log
if: always()