diff --git a/.github/workflows/retry-functional-test.yaml b/.github/workflows/retry-functional-test.yaml deleted file mode 100644 index 551bb3fd10..0000000000 --- a/.github/workflows/retry-functional-test.yaml +++ /dev/null @@ -1,581 +0,0 @@ -# ------------------------------------------------------------ -# Copyright 2023 The Radius Authors. -# -# 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: '[TEST] Functional tests with retry' - -permissions: - id-token: write # Required for requesting the JWT - contents: read # Required for actions/checkout - packages: write # Required for uploading the package - -on: - schedule: - # Run every 2 hours - - cron: "0 */2 * * *" - -env: - # Go version - GOVER: '1.21.7' - GOPROXY: https://proxy.golang.org - - # gotestsum version - see: https://github.com/gotestyourself/gotestsum - GOTESTSUM_VER: 1.10.0 - - # Helm version - HELM_VER: 'v3.12.0' - # KinD cluster version - KIND_VER: 'v0.20.0' - # Dapr version - DAPR_VER: '1.12.0' - DAPR_DASHBOARD_VER: '0.14.0' - # Kubectl version - KUBECTL_VER: 'v1.25.0' - # Azure Keyvault CSI driver chart version - AZURE_KEYVAULT_CSI_DRIVER_VER: '1.4.2' - # Azure workload identity webhook chart version - AZURE_WORKLOAD_IDENTITY_WEBHOOK_VER: '1.1.0' - # Container registry for storing container images - CONTAINER_REGISTRY: ghcr.io/radius-project/dev - # Container registry for storing Bicep recipe artifacts - BICEP_RECIPE_REGISTRY: ghcr.io/radius-project/dev - # The radius functional test timeout - FUNCTIONALTEST_TIMEOUT: 60m - # The Azure Location to store test resources - AZURE_LOCATION: westus3 - # The base directory for storing test logs - RADIUS_CONTAINER_LOG_BASE: dist/container_logs - # The Radius helm chart location. - RADIUS_CHART_LOCATION: deploy/Chart/ - # The region for AWS resources - AWS_REGION: 'us-west-2' - # The AWS account ID - AWS_ACCOUNT_ID: '${{ secrets.FUNCTEST_AWS_ACCOUNT_ID }}' - # The current GitHub action link - ACTION_LINK: '${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}' - # Server where terraform test modules are deployed - TF_RECIPE_MODULE_SERVER_URL: "http://tf-module-server.radius-test-tf-module-server.svc.cluster.local" - # The functional test GitHub app id - FUNCTIONAL_TEST_APP_ID: 425843 - # Private Git repository where terraform module for testing is stored. - TF_RECIPE_PRIVATE_GIT_SOURCE: "git::https://github.com/radius-project/terraform-private-modules//kubernetes-redis" - -jobs: - build: - name: Build Radius for test - runs-on: ubuntu-latest - env: - DE_IMAGE: 'ghcr.io/radius-project/deployment-engine' - DE_TAG: 'latest' - outputs: - REL_VERSION: ${{ steps.gen-id.outputs.REL_VERSION }} - UNIQUE_ID: ${{ steps.gen-id.outputs.UNIQUE_ID }} - PR_NUMBER: ${{ steps.gen-id.outputs.PR_NUMBER }} - CHECKOUT_REPO: ${{ steps.gen-id.outputs.CHECKOUT_REPO }} - CHECKOUT_REF: ${{ steps.gen-id.outputs.CHECKOUT_REF }} - RAD_CLI_ARTIFACT_NAME: ${{ steps.gen-id.outputs.RAD_CLI_ARTIFACT_NAME }} - DE_IMAGE: ${{ steps.gen-id.outputs.DE_IMAGE }} - DE_TAG: ${{ steps.gen-id.outputs.DE_TAG }} - steps: - - name: Get GitHub app token - uses: tibdex/github-app-token@v2 - id: get_installation_token - with: - app_id: ${{ env.FUNCTIONAL_TEST_APP_ID }} - private_key: ${{ secrets.FUNCTIONAL_TEST_APP_PRIVATE_KEY }} - - name: Set up checkout target - run: | - echo "CHECKOUT_REPO=youngbupark/radius" >> $GITHUB_ENV - echo "CHECKOUT_REF=refs/heads/youngp/enable-retry-test" >> $GITHUB_ENV - - name: Check out code - uses: actions/checkout@v4 - with: - repository: ${{ env.CHECKOUT_REPO }} - ref: ${{ env.CHECKOUT_REF }} - - name: Set up Go ${{ env.GOVER }} - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GOVER }} - - name: Generate ID for release - id: gen-id - run: | - BASE_STR="RADIUS|${GITHUB_SHA}|${GITHUB_SERVER_URL}|${GITHUB_REPOSITORY}|${GITHUB_RUN_ID}|${GITHUB_RUN_ATTEMPT}" - if [ "$GITHUB_EVENT_NAME" == "schedule" ]; then - # Add run number to randomize unique id for scheduled runs. - BASE_STR="${GITHUB_RUN_NUMBER}|${BASE_STR}" - fi - UNIQUE_ID=retry$(echo $BASE_STR | sha1sum | head -c 10) - echo "REL_VERSION=pr-${UNIQUE_ID}" >> $GITHUB_ENV - - # Set output variables to be used in the other jobs - echo "REL_VERSION=pr-${UNIQUE_ID}" >> $GITHUB_OUTPUT - echo "UNIQUE_ID=${UNIQUE_ID}" >> $GITHUB_OUTPUT - echo "CHECKOUT_REPO=${{ env.CHECKOUT_REPO }}" >> $GITHUB_OUTPUT - echo "CHECKOUT_REF=${{ env.CHECKOUT_REF }}" >> $GITHUB_OUTPUT - echo "AZURE_TEST_RESOURCE_GROUP=radtest-${UNIQUE_ID}" >> $GITHUB_OUTPUT - echo "RAD_CLI_ARTIFACT_NAME=rad_cli_linux_amd64" >> $GITHUB_OUTPUT - echo "PR_NUMBER=${{ env.PR_NUMBER }}" >> $GITHUB_OUTPUT - echo "DE_IMAGE=${{ env.DE_IMAGE }}" >> $GITHUB_OUTPUT - echo "DE_TAG=${{ env.DE_TAG }}" >> $GITHUB_OUTPUT - - uses: marocchino/sticky-pull-request-comment@v2 - if: env.PR_NUMBER != '' - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - hide: true - hide_classify: 'OUTDATED' - message: | - ## Radius functional test overview - - :mag: **[Go to test action run](${{ env.ACTION_LINK }})** - - | Name | Value | - |------|-------| - |**Repository** | ${{ steps.gen-id.outputs.CHECKOUT_REPO }} | - |**Commit ref** | ${{ steps.gen-id.outputs.CHECKOUT_REF }} | - |**Unique ID** | ${{ steps.gen-id.outputs.UNIQUE_ID }} | - |**Image tag** | ${{ steps.gen-id.outputs.REL_VERSION }} | - -
- Click here to see the list of tools in the current test run - - * gotestsum ${{ env.GOTESTSUM_VER }} - * KinD: ${{ env.KIND_VER }} - * Dapr: ${{ env.DAPR_VER }} - * Azure KeyVault CSI driver: ${{ env.AZURE_KEYVAULT_CSI_DRIVER_VER }} - * Azure Workload identity webhook: ${{ env.AZURE_WORKLOAD_IDENTITY_WEBHOOK_VER }} - * Bicep recipe location `${{ env.BICEP_RECIPE_REGISTRY }}/test/functional/shared/recipes/:${{ env.REL_VERSION }}` - * Terraform recipe location `${{ env.TF_RECIPE_MODULE_SERVER_URL }}/.zip` (in cluster) - * applications-rp test image location: `${{ env.CONTAINER_REGISTRY }}/applications-rp:${{ env.REL_VERSION }}` - * controller test image location: `${{ env.CONTAINER_REGISTRY }}/controller:${{ env.REL_VERSION }}` - * ucp test image location: `${{ env.CONTAINER_REGISTRY }}/ucpd:${{ env.REL_VERSION }}` - * deployment-engine test image location: `${{ env.DE_IMAGE }}:${{ env.DE_TAG }}` - -
- - ## Test Status - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - uses: marocchino/sticky-pull-request-comment@v2 - if: env.PR_NUMBER != '' - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - append: true - message: | - :hourglass: Building Radius and pushing container images for functional tests... - - name: Build and Push container images - run: | - make build && make docker-build && make docker-push - env: - DOCKER_REGISTRY: ${{ env.CONTAINER_REGISTRY }} - DOCKER_TAG_VERSION: ${{ env.REL_VERSION }} - - name: Upload CLI binary - uses: actions/upload-artifact@v4 - with: - name: ${{ steps.gen-id.outputs.RAD_CLI_ARTIFACT_NAME }} - path: | - ./dist/linux_amd64/release/rad - - uses: marocchino/sticky-pull-request-comment@v2 - if: success() && env.PR_NUMBER != '' - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - append: true - message: | - :white_check_mark: Container images build succeeded - - uses: marocchino/sticky-pull-request-comment@v2 - if: failure() && env.PR_NUMBER != '' - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - append: true - message: | - :x: Container images build failed - - uses: marocchino/sticky-pull-request-comment@v2 - if: env.PR_NUMBER != '' - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - append: true - message: | - :hourglass: Publishing Bicep Recipes for functional tests... - - name: Publish Bicep Test Recipes - run: | - mkdir ./bin - cp ./dist/linux_amd64/release/rad ./bin/rad - chmod +x ./bin/rad - export PATH=$GITHUB_WORKSPACE/bin:$PATH - which rad || { echo "cannot find rad"; exit 1; } - rad bicep download - rad version - make publish-test-bicep-recipes - env: - BICEP_RECIPE_REGISTRY: ${{ env.BICEP_RECIPE_REGISTRY }} - BICEP_RECIPE_TAG_VERSION: ${{ env.REL_VERSION }} - - uses: marocchino/sticky-pull-request-comment@v2 - if: success() && env.PR_NUMBER != '' - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - append: true - message: | - :white_check_mark: Recipe publishing succeeded - - uses: marocchino/sticky-pull-request-comment@v2 - if: failure() && env.PR_NUMBER != '' - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - append: true - message: | - :x: Test recipe publishing failed - tests: - name: Run ${{ matrix.name }} functional tests - needs: build - strategy: - fail-fast: true - matrix: - os: [ubuntu-latest] - name: [ucp,kubernetes,shared,msgrp,daprrp,samples,cli] - include: - # datastorerp functional tests need the larger VM. - - os: ubuntu-latest-m - name: datastoresrp - runs-on: ${{ matrix.os }} - env: - UNIQUE_ID: ${{ needs.build.outputs.UNIQUE_ID }} - REL_VERSION: ${{ needs.build.outputs.REL_VERSION }} - CHECKOUT_REPO: ${{ needs.build.outputs.CHECKOUT_REPO }} - CHECKOUT_REF: ${{ needs.build.outputs.CHECKOUT_REF }} - PR_NUMBER: ${{ needs.build.outputs.PR_NUMBER }} - AZURE_TEST_RESOURCE_GROUP: radtest-${{ needs.build.outputs.UNIQUE_ID }}-${{ matrix.name }} - RAD_CLI_ARTIFACT_NAME: ${{ needs.build.outputs.RAD_CLI_ARTIFACT_NAME }} - BICEP_RECIPE_TAG_VERSION: ${{ needs.build.outputs.REL_VERSION }} - DE_IMAGE: ${{ needs.build.outputs.DE_IMAGE }} - DE_TAG: ${{ needs.build.outputs.DE_TAG }} - steps: - - name: Get GitHub app token - uses: tibdex/github-app-token@v2 - id: get_installation_token - with: - app_id: ${{ env.FUNCTIONAL_TEST_APP_ID }} - private_key: ${{ secrets.FUNCTIONAL_TEST_APP_PRIVATE_KEY }} - - name: Checkout - uses: actions/checkout@v4 - with: - repository: ${{ env.CHECKOUT_REPO }} - ref: ${{ env.CHECKOUT_REF }} - - name: Checkout samples repo - uses: actions/checkout@v4 - if: matrix.name == 'samples' - with: - repository: radius-project/samples - ref: refs/heads/edge - path: samples - - name: Set up Go ${{ env.GOVER }} - uses: actions/setup-go@v5 - with: - go-version: ${{ env.GOVER }} - - name: Get Go Cache path - id: go-cache-paths - run: | - echo "go-build=$(go env GOCACHE)" >> $GITHUB_OUTPUT - echo "go-mod=$(go env GOMODCACHE)" >> $GITHUB_OUTPUT - - uses: actions/cache@v4 - with: - path: | - ${{ steps.go-cache-paths.outputs.go-build }} - ${{ steps.go-cache-paths.outputs.go-mod }} - key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ runner.os }}-go- - - name: Download rad CLI - uses: actions/download-artifact@v4 - with: - name: ${{ env.RAD_CLI_ARTIFACT_NAME }} - path: bin - - name: Login to Azure - uses: azure/login@v2 - with: - client-id: ${{ secrets.AZURE_SP_TESTS_APPID }} - tenant-id: ${{ secrets.AZURE_SP_TESTS_TENANTID }} - subscription-id: ${{ secrets.AZURE_SUBSCRIPTIONID_TESTS }} - - uses: marocchino/sticky-pull-request-comment@v2 - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - append: true - message: | - :hourglass: Starting ${{ matrix.name }} functional tests... - - name: Create azure resource group - ${{ env.AZURE_TEST_RESOURCE_GROUP }} - run: | - current_time=$(date +%s) - az group create \ - --location ${{ env.AZURE_LOCATION }} \ - --name $RESOURCE_GROUP \ - --subscription ${{ secrets.AZURE_SUBSCRIPTIONID_TESTS }} \ - --tags creationTime=$current_time - while [ $(az group exists --name $RESOURCE_GROUP) = false ]; do sleep 2; done - env: - RESOURCE_GROUP: ${{ env.AZURE_TEST_RESOURCE_GROUP }} - - uses: azure/setup-helm@v4 - with: - version: ${{ env.HELM_VER }} - - name: Create KinD cluster - run: | - curl -sSLo "kind" "https://github.com/kubernetes-sigs/kind/releases/download/${{ env.KIND_VER }}/kind-linux-amd64" - chmod +x ./kind - - # Populate the following environment variables for Azure workload identity from secrets. - # AZURE_OIDC_ISSUER_PUBLIC_KEY - # AZURE_OIDC_ISSUER_PRIVATE_KEY - # AZURE_OIDC_ISSUER - eval "export $(echo "${{ secrets.FUNCTEST_AZURE_OIDC_JSON }}" | jq -r 'to_entries | map("\(.key)=\(.value)") | @sh')" - - AUTHKEY=$(echo -n "${{ github.actor }}:${{ secrets.GH_RAD_CI_BOT_PAT }}" | base64) - echo "{\"auths\":{\"ghcr.io\":{\"auth\":\"${AUTHKEY}\"}}}" > "./ghcr_secret.json" - - # Create KinD cluster with OIDC Issuer keys - echo $AZURE_OIDC_ISSUER_PUBLIC_KEY | base64 -d > sa.pub - echo $AZURE_OIDC_ISSUER_PRIVATE_KEY | base64 -d > sa.key - cat <> $POD_STATE_LOG_FILENAME - kubectl get pods -A >> $POD_STATE_LOG_FILENAME - echo "kubectl describe pods -A" >> $POD_STATE_LOG_FILENAME - kubectl describe pods -A >> $POD_STATE_LOG_FILENAME - - name: Upload container logs - if: always() - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.name }}_container_logs - path: ./${{ env.RADIUS_CONTAINER_LOG_BASE }} - - name: Get Terraform recipe publishing logs - if: always() - run: | - # Create pod-logs directory - mkdir -p recipes/pod-logs - # Get pod logs and save to file - namespace="radius-test-tf-module-server" - label="app.kubernetes.io/name=tf-module-server" - pod_names=($(kubectl get pods -l $label -n $namespace -o jsonpath='{.items[*].metadata.name}')) - for pod_name in "${pod_names[@]}"; do - kubectl logs $pod_name -n $namespace > recipes/pod-logs/${pod_name}.txt - done - echo "Pod logs saved to recipes/pod-logs/" - # Get kubernetes events and save to file - kubectl get events -n $namespace > recipes/pod-logs/events.txt - - name: Upload Terraform recipe publishing logs - uses: actions/upload-artifact@v4 - if: always() - with: - name: ${{ matrix.name }}_recipes-pod-logs - path: recipes/pod-logs - if-no-files-found: error - - uses: marocchino/sticky-pull-request-comment@v2 - if: success() && env.PR_NUMBER != '' - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - append: true - message: | - :white_check_mark: ${{ matrix.name }} functional tests succeeded - - uses: marocchino/sticky-pull-request-comment@v2 - if: failure() && env.PR_NUMBER != '' - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - append: true - message: | - :x: ${{ matrix.name }} functional test failed. Please check [the logs](${{ env.ACTION_LINK }}) for more details - - uses: marocchino/sticky-pull-request-comment@v2 - if: cancelled() && env.PR_NUMBER != '' - continue-on-error: true - with: - GITHUB_TOKEN: ${{ steps.get_installation_token.outputs.token }} - header: teststatus-${{ github.run_id }} - number: ${{ env.PR_NUMBER }} - append: true - message: | - :x: ${{ matrix.name }} functional test cancelled. Please check [the logs](${{ env.ACTION_LINK }}) for more details