From f45e4c695679d41fca747d3e578ad3c1a81c3834 Mon Sep 17 00:00:00 2001 From: Ying Chun Guo Date: Mon, 19 Aug 2024 10:27:10 +0800 Subject: [PATCH] Add GMC e2e in CD workflow (#619) Signed-off-by: Yingchun Guo --- .github/workflows/_example-workflow.yml | 16 +++++ .github/workflows/_gmc-e2e.yml | 87 +++++++++++++++++++++++++ .github/workflows/pr-gmc-e2e.yaml | 65 ++---------------- 3 files changed, 108 insertions(+), 60 deletions(-) create mode 100644 .github/workflows/_gmc-e2e.yml diff --git a/.github/workflows/_example-workflow.yml b/.github/workflows/_example-workflow.yml index f28426805..097f0536b 100644 --- a/.github/workflows/_example-workflow.yml +++ b/.github/workflows/_example-workflow.yml @@ -32,6 +32,10 @@ on: default: false required: false type: boolean + test_gmc: + default: false + required: false + type: boolean opea_branch: default: "main" required: false @@ -148,3 +152,15 @@ jobs: tag: ${{ inputs.tag }} context: "CD" secrets: inherit + +#################################################################################################### +# GMC Test +#################################################################################################### + test-gmc-pipeline: + needs: [build-images] + if: ${{ fromJSON(inputs.test_gmc) }} + uses: ./.github/workflows/_gmc-e2e.yml + with: + example: ${{ inputs.example }} + hardware: ${{ inputs.node }} + secrets: inherit diff --git a/.github/workflows/_gmc-e2e.yml b/.github/workflows/_gmc-e2e.yml new file mode 100644 index 000000000..f7955acf2 --- /dev/null +++ b/.github/workflows/_gmc-e2e.yml @@ -0,0 +1,87 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +# This workflow will only test GMC pipeline and will not install GMC any more +name: Single GMC E2e Test For CD Workflow Call + +on: + workflow_call: + inputs: + example: + default: "ChatQnA" + description: "The example to test on K8s" + required: true + type: string + hardware: + default: "xeon" + description: "Nodes to run the test, xeon or gaudi" + required: true + type: string + +jobs: + gmc-test: + runs-on: "k8s-${{ inputs.hardware }}" + continue-on-error: true + steps: + - name: Clean Up Working Directory + run: sudo rm -rf ${{github.workspace}}/* + + - name: Get checkout ref + run: | + if [ "${{ github.event_name }}" == "pull_request" ] || [ "${{ github.event_name }}" == "pull_request_target" ]; then + echo "CHECKOUT_REF=refs/pull/${{ github.event.number }}/merge" >> $GITHUB_ENV + else + echo "CHECKOUT_REF=${{ github.ref }}" >> $GITHUB_ENV + fi + echo "checkout ref ${{ env.CHECKOUT_REF }}" + + - name: Checkout out Repo + uses: actions/checkout@v4 + with: + ref: ${{ env.CHECKOUT_REF }} + fetch-depth: 0 + + - name: Set variables + run: | + echo "IMAGE_REPO=$OPEA_IMAGE_REPO" >> $GITHUB_ENV + lower_example=$(echo "${{ inputs.example }}" | tr '[:upper:]' '[:lower:]') + echo "APP_NAMESPACE=$lower_example-$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV + echo "ROLLOUT_TIMEOUT_SECONDS=1800s" >> $GITHUB_ENV + echo "KUBECTL_TIMEOUT_SECONDS=60s" >> $GITHUB_ENV + echo "continue_test=true" >> $GITHUB_ENV + echo "should_cleanup=false" >> $GITHUB_ENV + echo "APP_NAMESPACE=$APP_NAMESPACE" + + - name: Run tests + id: run-test + env: + HUGGINGFACEHUB_API_TOKEN: ${{ secrets.HUGGINGFACEHUB_API_TOKEN }} + GOOGLE_CSE_ID: ${{ secrets.GOOGLE_CSE_ID }} + GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} + run: | + if [[ ! -f ${{ github.workspace }}/${{ inputs.example }}/tests/test_gmc_on_${{ inputs.hardware }}.sh ]]; then + echo "No test script found, exist test!" + exit 0 + else + echo "should_cleanup=true" >> $GITHUB_ENV + ${{ github.workspace }}/${{ inputs.example }}/tests/test_gmc_on_${{ inputs.hardware }}.sh install_${{ inputs.example }} + echo "Testing ${{ inputs.example }}, waiting for pod ready..." + if kubectl rollout status deployment --namespace "$APP_NAMESPACE" --timeout "$ROLLOUT_TIMEOUT_SECONDS"; then + echo "Testing gmc ${{ inputs.example }}, running validation test..." + ${{ github.workspace }}/${{ inputs.example }}/tests/test_gmc_on_${{ inputs.hardware }}.sh validate_${{ inputs.example }} + else + echo "Timeout waiting for pods in namespace $APP_NAMESPACE to be ready!" + exit 1 + fi + sleep 60 + fi + + - name: Kubectl uninstall + if: always() + run: | + if $should_cleanup; then + if ! kubectl delete ns $APP_NAMESPACE --timeout=$KUBECTL_TIMEOUT_SECONDS; then + kubectl delete pods --namespace $APP_NAMESPACE --force --grace-period=0 --all + kubectl delete ns $APP_NAMESPACE --force --grace-period=0 --timeout=$KUBECTL_TIMEOUT_SECONDS + fi + fi diff --git a/.github/workflows/pr-gmc-e2e.yaml b/.github/workflows/pr-gmc-e2e.yaml index 235c2a555..5b3b04863 100644 --- a/.github/workflows/pr-gmc-e2e.yaml +++ b/.github/workflows/pr-gmc-e2e.yaml @@ -31,63 +31,8 @@ jobs: needs: [job1] strategy: matrix: ${{ fromJSON(needs.job1.outputs.run_matrix) }} - runs-on: "k8s-${{ matrix.hardware }}" - continue-on-error: true - steps: - - name: E2e test gmc - run: | - echo "Matrix - gmc: ${{ matrix.example }}" - - - name: Clean Up Working Directory - run: sudo rm -rf ${{github.workspace}}/* - - - name: Checkout out Repo - uses: actions/checkout@v4 - with: - ref: "refs/pull/${{ github.event.number }}/merge" - - - name: Set variables - run: | - if [ ${{ matrix.hardware }} == "gaudi" ]; then IMAGE_REPO=${{ vars.IMAGE_REPO_GAUDI }}; else IMAGE_REPO=${{ vars.IMAGE_REPO_XEON }}; fi - echo "IMAGE_REPO=$OPEA_IMAGE_REPO" >> $GITHUB_ENV - lower_example=$(echo "${{ matrix.example }}" | tr '[:upper:]' '[:lower:]') - echo "APP_NAMESPACE=$lower_example-$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV - echo "ROLLOUT_TIMEOUT_SECONDS=1800s" >> $GITHUB_ENV - echo "KUBECTL_TIMEOUT_SECONDS=60s" >> $GITHUB_ENV - echo "continue_test=true" >> $GITHUB_ENV - echo "should_cleanup=false" >> $GITHUB_ENV - echo "APP_NAMESPACE=$APP_NAMESPACE" - - - name: Run tests - id: run-test - env: - HUGGINGFACEHUB_API_TOKEN: ${{ secrets.HUGGINGFACEHUB_API_TOKEN }} - GOOGLE_CSE_ID: ${{ secrets.GOOGLE_CSE_ID }} - GOOGLE_API_KEY: ${{ secrets.GOOGLE_API_KEY }} - run: | - if [[ ! -f ${{ github.workspace }}/${{ matrix.example }}/tests/test_gmc_on_${{ matrix.hardware }}.sh ]]; then - echo "No test script found, exist test!" - exit 0 - else - echo "should_cleanup=true" >> $GITHUB_ENV - ${{ github.workspace }}/${{ matrix.example }}/tests/test_gmc_on_${{ matrix.hardware }}.sh install_${{ matrix.example }} - echo "Testing ${{ matrix.example }}, waiting for pod ready..." - if kubectl rollout status deployment --namespace "$APP_NAMESPACE" --timeout "$ROLLOUT_TIMEOUT_SECONDS"; then - echo "Testing gmc ${{ matrix.example }}, running validation test..." - ${{ github.workspace }}/${{ matrix.example }}/tests/test_gmc_on_${{ matrix.hardware }}.sh validate_${{ matrix.example }} - else - echo "Timeout waiting for pods in namespace $APP_NAMESPACE to be ready!" - exit 1 - fi - sleep 60 - fi - - - name: Kubectl uninstall - if: always() - run: | - if $should_cleanup; then - if ! kubectl delete ns $APP_NAMESPACE --timeout=$KUBECTL_TIMEOUT_SECONDS; then - kubectl delete pods --namespace $APP_NAMESPACE --force --grace-period=0 --all - kubectl delete ns $APP_NAMESPACE --force --grace-period=0 --timeout=$KUBECTL_TIMEOUT_SECONDS - fi - fi + uses: ./.github/workflows/_gmc-e2e.yml + with: + example: ${{ matrix.example }} + hardware: ${{ matrix.hardware }} + secrets: inherit