Skip to content

PlatformQA - pqa215.qa.rancher.space - validation/auth/provider/activedirectory #2446

PlatformQA - pqa215.qa.rancher.space - validation/auth/provider/activedirectory

PlatformQA - pqa215.qa.rancher.space - validation/auth/provider/activedirectory #2446

name: Platform QA Test Runner with Qase Reporting
run-name: "PlatformQA - ${{ github.event.inputs.rancher_host }} - ${{ github.event.inputs.test_package }}"
on:
workflow_dispatch:
inputs:
rancher_host:
description: "Rancher host (e.g. mycluster.qa.rancher.space)"
required: true
test_package:
description: "Single test package path (e.g. validation/rbac)"
required: true
run_all_tests:
description: "Run all test files in the package?"
required: true
default: "true"
type: choice
options: ["true", "false"]
test_selector:
description: "Test suite or test name regex (e.g. ^TestSuiteName$ or ^TestSuite/TestCase$), if run_all_tests=false"
required: false
exclude_test_files:
description: "Test files to exclude (comma-separated), if run_all_tests=true (e.g. rbac_test.go,projects_test.go)"
required: false
report_to_qase:
description: "Enable Qase reporting"
required: false
default: "false"
type: choice
options: ["true", "false"]
qase_test_run_id:
description: "Qase Test Run ID, if report_to_qase=true"
required: false
permissions:
id-token: write
contents: read
jobs:
run-tests:
runs-on: ubuntu-latest
env:
RANCHER_HOST: ${{ github.event.inputs.rancher_host }}
TEST_PACKAGE: ${{ github.event.inputs.test_package }}
RUN_ALL_TESTS: ${{ github.event.inputs.run_all_tests }}
EXCLUDE_TEST_FILES: ${{ github.event.inputs.exclude_test_files }}
TEST_SELECTOR: ${{ github.event.inputs.test_selector }}
REPORT_TO_QASE: ${{ github.event.inputs.report_to_qase }}
QASE_TEST_RUN_ID: ${{ github.event.inputs.qase_test_run_id }}
GOTESTSUM_OUTPUT_BUFFER: 0
CLUSTER_NAME: ${{ vars.PQA_DS_CLUSTER_NAME }}
AWS_INSTANCE_TYPE: ${{ vars.AWS_INSTANCE_TYPE }}
AWS_ROOT_SIZE: ${{ vars.AWS_ROOT_SIZE }}
AWS_VOLUME_TYPE: ${{ vars.AWS_VOLUME_TYPE }}
AWS_ZONE_LETTER: ${{ vars.AWS_ZONE_LETTER }}
PROVIDER_AMAZON: ${{ vars.PROVIDER_AMAZON }}
CNI: ${{ vars.PQA_CNI }}
NETWORK_STACK_PREFERENCE: ${{ vars.PQA_NETWORK_STACK_PREFERENCE }}
OPENLDAP_SA_DN_NAME: ${{ vars.OPENLDAP_SA_DN_NAME }}
OPENLDAP_USERS_SEARCHBASE: ${{ vars.OPENLDAP_USERS_SEARCHBASE }}
OPENLDAP_GROUPS_SEARCHBASE: ${{ vars.OPENLDAP_GROUPS_SEARCHBASE }}
AD_PORT: ${{ vars.AD_PORT }}
AD_SA_DN_NAME: ${{ vars.AD_SA_DN_NAME }}
AD_USERS_SEARCHBASE: ${{ vars.AD_USERS_SEARCHBASE }}
AD_GROUPS_SEARCHBASE: ${{ vars.AD_GROUPS_SEARCHBASE }}
steps:
- name: Checkout repository
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5.0.1
with:
submodules: recursive
- name: Set up Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version-file: "./go.mod"
cache-dependency-path: "**/*.sum"
- name: Install gotestsum
run: go install gotest.tools/gotestsum@c4a0df2e75a225d979a444342dd3db752b53619f # v1.13.0
- name: Create SSH key file
env:
SSH_PRIVATE_KEY_NAME: ${{ secrets.SSH_PRIVATE_KEY_NAME }}
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
shell: bash
run: |
mkdir -p ~/.ssh
echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/$SSH_PRIVATE_KEY_NAME.pem
chmod 600 ~/.ssh/$SSH_PRIVATE_KEY_NAME.pem
echo "SSH_PRIVATE_KEY_PATH=$HOME/.ssh" >> $GITHUB_ENV
- name: Fetch and Set DockerHub Credentials
uses: rancher-eio/read-vault-secrets@0da85151ad1f19ed7986c41587e45aac1ace74b6
with:
secrets: |
secret/data/github/repo/${{ github.repository }}/dockerhub/org-token/credentials username | DOCKERHUB_USERNAME ;
secret/data/github/repo/${{ github.repository }}/dockerhub/org-token/credentials password | DOCKERHUB_PASSWORD
- name: Mask Dockerhub Credentials
run: |
echo "::add-mask::${{ env.DOCKERHUB_USERNAME }}"
echo "::add-mask::${{ env.DOCKERHUB_PASSWORD }}"
- name: Create Rancher admin token
id: create-token
env:
RANCHER_ADMIN_PASSWORD: ${{ secrets.PQA_RANCHER_ADMIN_PASSWORD }}
run: bash .github/scripts/platform-qa-create-rancher-token.sh
- name: Get Rancher version
env:
RANCHER_ADMIN_TOKEN: ${{ steps.create-token.outputs.RANCHER_ADMIN_TOKEN }}
run: bash .github/scripts/platform-qa-get-rancher-version.sh
- name: Get supported Kubernetes version
env:
RANCHER_ADMIN_TOKEN: ${{ steps.create-token.outputs.RANCHER_ADMIN_TOKEN }}
run: bash .github/scripts/platform-qa-get-k8s-version.sh
- name: Provision downstream cluster
env:
RANCHER_ADMIN_TOKEN: ${{ steps.create-token.outputs.RANCHER_ADMIN_TOKEN }}
AWS_ACCESS_KEY: ${{ secrets.PQA_AWS_ACCESS_KEY }}
AWS_SECRET_KEY: ${{ secrets.PQA_AWS_SECRET_ACCESS_KEY }}
AWS_AMI: ${{ secrets.AWS_AMI }}
AWS_REGION: ${{ secrets.AWS_REGION }}
AWS_VPC_ID: ${{ secrets.PQA_AWS_VPC_ID }}
AWS_SUBNET_ID: ${{ secrets.PQA_AWS_SUBNET_ID }}
AWS_SECURITY_GROUP_NAMES: ${{ secrets.PQA_AWS_SECURITY_GROUP_NAMES }}
QA_PRIVATE_REGISTRY_NAME: ${{ secrets.QA_PRIVATE_REGISTRY_NAME }}
DOCKERHUB_USERNAME: ${{ env.DOCKERHUB_USERNAME }}
DOCKERHUB_PASSWORD: ${{ env.DOCKERHUB_PASSWORD }}
run: bash .github/scripts/platform-qa-provision-downstream-k3s.sh
- name: Create cattle config
env:
RANCHER_ADMIN_TOKEN: ${{ steps.create-token.outputs.RANCHER_ADMIN_TOKEN }}
RANCHER_ADMIN_PASSWORD: ${{ secrets.PQA_RANCHER_ADMIN_PASSWORD }}
QUAY_REGISTRY_NAME: ${{ secrets.QUAY_REGISTRY_NAME }}
QUAY_REGISTRY_USERNAME: ${{ secrets.QUAY_REGISTRY_USERNAME }}
QUAY_REGISTRY_PASSWORD: ${{ secrets.QUAY_REGISTRY_PASSWORD }}
QA_PRIVATE_REGISTRY_NAME: ${{ secrets.QA_PRIVATE_REGISTRY_NAME }}
DOCKERHUB_USERNAME: ${{ env.DOCKERHUB_USERNAME }}
DOCKERHUB_PASSWORD: ${{ env.DOCKERHUB_PASSWORD }}
AWS_ACCESS_KEY: ${{ secrets.PQA_AWS_ACCESS_KEY }}
AWS_SECRET_KEY: ${{ secrets.PQA_AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
AWS_IAM_PROFILE: ${{ secrets.AWS_IAM_PROFILE }}
AWS_AMI: ${{ secrets.AWS_AMI }}
AWS_USER: ${{ secrets.AWS_USER }}
AWS_VPC_ID: ${{ secrets.PQA_AWS_VPC_ID }}
AWS_SUBNET_ID: ${{ secrets.PQA_AWS_SUBNET_ID }}
AWS_SECURITY_GROUPS: ${{ secrets.PQA_AWS_SECURITY_GROUPS }}
AWS_SECURITY_GROUP_NAMES: ${{ secrets.PQA_AWS_SECURITY_GROUP_NAMES }}
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SSH_PRIVATE_KEY_NAME: ${{ secrets.SSH_PRIVATE_KEY_NAME }}
OPENLDAP_HOSTNAME: ${{ secrets.OPENLDAP_HOSTNAME }}
OPENLDAP_ADMIN_USERNAME: ${{ secrets.OPENLDAP_ADMIN_USERNAME }}
OPENLDAP_ADMIN_PASSWORD: ${{ secrets.OPENLDAP_ADMIN_PASSWORD }}
OPENLDAP_USER_PASSWORD: ${{ secrets.OPENLDAP_USER_PASSWORD }}
OPENLDAP_SA_PASSWORD: ${{ secrets.OPENLDAP_SA_PASSWORD }}
AD_HOSTNAME: ${{ secrets.AD_HOSTNAME }}
AD_ADMIN_USERNAME: ${{ secrets.AD_ADMIN_USERNAME }}
AD_ADMIN_PASSWORD: ${{ secrets.AD_ADMIN_PASSWORD }}
AD_USER_PASSWORD: ${{ secrets.AD_USER_PASSWORD }}
AD_SA_PASSWORD: ${{ secrets.AD_SA_PASSWORD }}
run: bash .github/scripts/platform-qa-create-cattle-config.sh
- name: Run all tests in package
if: ${{ github.event.inputs.run_all_tests == 'true' }}
env:
CATTLE_TEST_CONFIG: ${{ github.workspace }}/cattle-config.yaml
run: |
REPO_ROOT="${GITHUB_WORKSPACE}"
PACKAGE="$TEST_PACKAGE"
TAGS="validation"
if [ ! -d "$PACKAGE" ]; then
echo "❌ Package $PACKAGE not found. Exiting."
exit 1
fi
echo "🔎 Package: $PACKAGE"
cd "$REPO_ROOT/$PACKAGE"
ALL_TEST_FILES=$(ls *_test.go 2>/dev/null | grep -E -v '(^_deprecated_|^deprecated_)' || true)
FILTERED_TEST_FILES=""
for file in $ALL_TEST_FILES; do
if grep -q "\!$RANCHER_SHORT_VERSION" "$file"; then
echo "Skipping $file (excluded for version $RANCHER_SHORT_VERSION)"
continue
fi
FILTERED_TEST_FILES="$FILTERED_TEST_FILES $file"
done
if [ -n "$EXCLUDE_TEST_FILES" ]; then
EXCLUDE_PATTERN_FILE=$(mktemp)
echo "$EXCLUDE_TEST_FILES" | tr ',' '\n' > "$EXCLUDE_PATTERN_FILE"
FILTERED_TEST_FILES=$(echo "$FILTERED_TEST_FILES" | tr ' ' '\n' | grep -x -v -f "$EXCLUDE_PATTERN_FILE" | tr '\n' ' ' || true)
rm "$EXCLUDE_PATTERN_FILE"
fi
FILTERED_TEST_FILES=$(echo "$FILTERED_TEST_FILES" | xargs)
if [ -z "$FILTERED_TEST_FILES" ]; then
echo "⚠️ No test files found after applying filters. Exiting."
exit 0
fi
NON_TEST_GO_FILES=$(ls *.go 2>/dev/null | grep -v '_test.go' || true)
FILES_TO_COMPILE_AND_RUN="$FILTERED_TEST_FILES $NON_TEST_GO_FILES"
echo "$(date +'%T') — 🚀 Running tests in package $PACKAGE"
echo " Test Files: $FILTERED_TEST_FILES"
echo " With tags: $TAGS"
set +e
stdbuf -oL gotestsum \
--format=standard-verbose \
--junitfile "$GITHUB_WORKSPACE/results-${PACKAGE//\//-}.xml" \
--jsonfile "$GITHUB_WORKSPACE/results-${PACKAGE//\//-}.json" \
-- -v -tags="$TAGS" -timeout 6h $FILES_TO_COMPILE_AND_RUN
TEST_EXIT_CODE=$?
echo "TEST_EXIT_CODE=$TEST_EXIT_CODE" >> $GITHUB_ENV
set -e
echo "✅ Finished executing tests for package $PACKAGE on cluster $RANCHER_HOST"
echo " Results: $GITHUB_WORKSPACE/results-${PACKAGE//\//-}.json"
- name: Run single test with selector
if: ${{ github.event.inputs.run_all_tests == 'false' }}
env:
CATTLE_TEST_CONFIG: ${{ github.workspace }}/cattle-config.yaml
run: |
REPO_ROOT="${GITHUB_WORKSPACE}"
PACKAGE="$TEST_PACKAGE"
TAGS="validation"
if [ -z "$TEST_SELECTOR" ]; then
echo "❌ test_selector input is required when run_all_tests is false"
exit 1
fi
echo "▶ Running selector: '$TEST_SELECTOR' with tags: $TAGS for package: $PACKAGE"
set +e
stdbuf -oL gotestsum \
--format=standard-verbose \
--junitfile "$GITHUB_WORKSPACE/results-${PACKAGE//\//-}.xml" \
--jsonfile "$GITHUB_WORKSPACE/results-${PACKAGE//\//-}.json" \
--packages="github.com/rancher/tests/$PACKAGE" \
-- -v -tags="$TAGS" -timeout 6h -run "$TEST_SELECTOR"
TEST_EXIT_CODE=$?
echo "TEST_EXIT_CODE=$TEST_EXIT_CODE" >> $GITHUB_ENV
set -e
echo "✅ Finished executing tests for package $PACKAGE on cluster $RANCHER_HOST"
echo " Results: $GITHUB_WORKSPACE/results-${PACKAGE//\//-}.json"
- name: Report results to Qase
if: ${{ github.event.inputs.report_to_qase == 'true' }}
env:
QASE_AUTOMATION_TOKEN: ${{ secrets.PQA_QASE_AUTOMATION_TOKEN }}
run: |
PACKAGE="$TEST_PACKAGE"
if [ -z "$QASE_TEST_RUN_ID" ]; then
echo "⚠️ QASE reporting requested but no test run ID provided. Skipping reporting."
exit 0
fi
bash "$GITHUB_WORKSPACE/.github/scripts/platform-qa-report-to-qase.sh" \
"$GITHUB_WORKSPACE/results-${PACKAGE//\//-}.json" \
"$PACKAGE" \
"$QASE_TEST_RUN_ID" \
"$QASE_AUTOMATION_TOKEN"
- name: Fail workflow if any test failed
run: |
TEST_EXIT_CODE=${TEST_EXIT_CODE:-0}
if [ "${TEST_EXIT_CODE}" != "0" ]; then
echo "❌ One or more tests failed in package $TEST_PACKAGE"
exit 1
fi
- name: Remove SSH key
if: always()
env:
SSH_PRIVATE_KEY_NAME: ${{ secrets.SSH_PRIVATE_KEY_NAME }}
run: rm -f ~/.ssh/$SSH_PRIVATE_KEY_NAME.pem