diff --git a/.github/workflows/chart-integration.yaml b/.github/workflows/chart-integration.yaml index ddcde5d95..67eacdd26 100644 --- a/.github/workflows/chart-integration.yaml +++ b/.github/workflows/chart-integration.yaml @@ -8,8 +8,9 @@ on: branches: [main] types: [opened, reopened, ready_for_review, synchronize] # added `ready_for_review` since draft is skipped paths: - - helm-charts/** - - .github/workflows/scripts/chart-integration/** + #- helm-charts/** + #- .github/workflows/scripts/chart-integration/** + - scripts workflow_dispatch: # If there is a new commit, the previous jobs will be canceled diff --git a/.github/workflows/helmcharts-e2e.yaml b/.github/workflows/helmcharts-e2e.yaml new file mode 100644 index 000000000..cb9ef5b63 --- /dev/null +++ b/.github/workflows/helmcharts-e2e.yaml @@ -0,0 +1,104 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +name: E2E test with helm charts + +on: + pull_request: + branches: [main] + types: [opened, reopened, ready_for_review, synchronize] # added `ready_for_review` since draft is skipped + paths: + - helm-charts/** + - .github/workflows/scripts/chart-integration/** + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + CHARTS_DIR: "helm-charts" + +jobs: + job1: + name: Get-test-matrix + runs-on: ubuntu-latest + outputs: + run_matrix: ${{ steps.get-test-matrix.outputs.run_matrix }} + steps: + - name: Checkout out Repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get test matrix + id: get-test-matrix + run: | + changed_charts=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} | \ + grep "^$CHARTS_DIR/" | \ + grep -vE 'README.md|common' | \ + cut -d'/' -f2 | sort -u ) + # set run_matrix to be "{"chart":["chart1","chart2",...]}" + run_matrix="{\"chart\":[" + for chart in ${changed_charts}; do + run_matrix="${run_matrix}\"${chart}\"," + done + run_matrix=$run_matrix"]}" + echo "run_matrix=${run_matrix}" + echo "run_matrix=${run_matrix}" >> $GITHUB_OUTPUT + + Chart-test: + needs: job1 + if: ${{ needs.job1.outputs.run_matrix != '{}' && needs.job1.outputs.run_matrix.chart }} + strategy: + matrix: ${{ fromJSON(needs.job1.outputs.run_matrix) }} + runs-on: inspur-icx-1 + continue-on-error: true + outputs: + should_cleanup: ${{ steps.set_boolean.outputs.should_cleanup }} + steps: + - name: E2e test chart + run: | + echo "Matrix - chart: ${{ matrix.chart }}" + + - name: Clean Up Working Directory + run: sudo rm -rf ${{github.workspace}}/* + + - name: Checkout out Repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set variables + run: | + echo "RELEASE_NAME=${{ matrix.chart }}$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV + echo "NAMESPACE=${{ matrix.chart }}-$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV + echo "ROLLOUT_TIMEOUT_SECONDS=300s" >> $GITHUB_ENV + echo "KUBECTL_TIMEOUT_SECONDS=60s" >> $GITHUB_ENV + echo "should_cleanup=false" >> $GITHUB_ENV + echo "RELEASENAME=$RELEASE_NAME" + echo "NAMESPACE=$NAMESPACE" + + - name: Initialize chart testing + run: | + .github/workflows/scripts/chart-integration/lib.sh init_codegen + + - name: Helm install + run: | + echo "should_cleanup=true" >> $GITHUB_ENV + if ! helm install --create-namespace --namespace $NAMESPACE --wait --timeout "$ROLLOUT_TIMEOUT_SECONDS" $RELEASE_NAME $CHARTS_DIR/${{ matrix.chart }} ; then + echo "Failed to install chart ${{ matrix.chart }}" + fi + + - name: Validate e2e test + run: | + .github/workflows/scripts/chart-integration/lib.sh validate_codegen $RELEASE_NAME $NAMESPACE + + - name: Helm uninstall + if: always() && ${{ needs.Chart-test.outputs.should_cleanup }} + run: | + helm uninstall $RELEASE_NAME --namespace $NAMESPACE + if ! kubectl delete ns $NAMESPACE --timeout=$KUBECTL_TIMEOUT_SECONDS; then + kubectl delete pods --namespace $NAMESPACE --force --grace-period=0 --all + kubectl delete ns $NAMESPACE --force --grace-period=0 --timeout=$KUBECTL_TIMEOUT_SECONDS + fi diff --git a/.github/workflows/scripts/chart-integration/lib.sh b/.github/workflows/scripts/chart-integration/lib.sh old mode 100644 new mode 100755 index 83e181177..95b470708 --- a/.github/workflows/scripts/chart-integration/lib.sh +++ b/.github/workflows/scripts/chart-integration/lib.sh @@ -5,8 +5,10 @@ LOG_PATH=. function init_codegen() { + # executed under path helm-charts/codegen # init var - CHART_MOUNT=/home/$USER_ID/charts-mnt/codegen + USER_ID=$(whoami) + CHART_MOUNT=/home/$USER_ID/charts-mnt MODELREPO=m-a-p MODELNAME=OpenCodeInterpreter-DS-6.7B MODELID=$MODELREPO/$MODELNAME @@ -95,3 +97,34 @@ function validate_chatqna() { echo "Response check succeed!" fi } + +if [ $# -eq 0 ]; then + echo "Usage: $0 " + exit 1 +fi + +case "$1" in + init_codegen) + pushd helm-charts/codegen + init_codegen + popd + ;; + validate_codegen) + RELEASE_NAME=$2 + NAMESPACE=$3 + validate_codegen + ;; + init_chatqna) + pushd helm-charts/chatqna + init_chatqna + popd + ;; + validate_chatqna) + RELEASE_NAME=$2 + NAMESPACE=$3 + validate_chatqna + ;; + *) + echo "Unknown function: $1" + ;; +esac diff --git a/helm-charts/codegen/Chart.yaml b/helm-charts/codegen/Chart.yaml index 785e332e5..6c867a34d 100644 --- a/helm-charts/codegen/Chart.yaml +++ b/helm-charts/codegen/Chart.yaml @@ -8,5 +8,5 @@ type: application dependencies: - name: llm-uservice version: "0.1.0" -version: 0.1.0 +version: 0.1.1 appVersion: "1.0.0"