name: daily_run_test

on:
  workflow_dispatch:
  schedule:
    - cron:  '56 16 * * *'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

env:
  CONDA_ENV: opencompass_regression
  PIP_CACHE_PATH: /cpfs01/user/qa-llm-cicd/.cache/pip
  USERSPACE_PREFIX: /cpfs01/user/qa-llm-cicd
  HF_CACHE_PATH: /cpfs01/shared/public/public_hdd/llmeval/model_weights/hf_hub

jobs:
  daily_run_test:
    runs-on: self-hosted
    environment: 'prod'
    timeout-minutes: 240 #4hours
    steps:
      - name: Clone repository
        uses: actions/checkout@v2
      - name: Prepare - create conda env and install torch
        run: |
          eval "$(conda shell.bash hook)"
          conda create -y --name ${{env.CONDA_ENV}} python=3.10
          conda activate ${{env.CONDA_ENV}}
          pip install torch torchvision torchaudio --cache-dir ${{env.PIP_CACHE_PATH}} --index-url https://download.pytorch.org/whl/cu118
          conda info --envs
      - name: Prepare - Pip install code
        run: |
          eval "$(conda shell.bash hook)"
          conda activate ${{env.CONDA_ENV}}
          pip install -e . --cache-dir ${{env.PIP_CACHE_PATH}}
          pip install human_eval transformers==4.33.0 --cache-dir ${{env.PIP_CACHE_PATH}}
          conda info --envs
      - name: Prepare - prepare data and hf model
        run: |
          cp -r ${{env.USERSPACE_PREFIX}}/data .
          rm -rf ~/.cache/huggingface/hub -f && mkdir ~/.cache -p && mkdir ~/.cache/huggingface -p
          ln -s ${{env.HF_CACHE_PATH}} ~/.cache/huggingface/hub
          export HF_DATASETS_OFFLINE=1; export TRANSFORMERS_OFFLINE=1;
      - name:  Run test
        run: |
          eval "$(conda shell.bash hook)"
          conda activate ${{env.CONDA_ENV}}
          conda info --envs
          rm -rf regression_result_daily
          export from_tf=TRUE
          python3 run.py --models hf_internlm_chat_7b hf_internlm_7b hf_chatglm3_6b_base hf_chatglm3_6b hf_qwen_7b_chat hf_qwen_7b --datasets FewCLUE_chid_ppl humaneval_gen ARC_c_ppl obqa_ppl --work-dir regression_result_daily
      - name:  Get result
        run: |
          eval "$(conda shell.bash hook)"
          pip install pytest --cache-dir ${{env.PIP_CACHE_PATH}}
          python -m pytest -s -v --color=yes .github/scripts/oc_score_assert.py
      - name:  Remove Conda Env
        if: always()
        run: |
          eval "$(conda shell.bash hook)"
          conda env remove --name ${{env.CONDA_ENV}}
          conda info --envs

  notify_to_feishu:
    if: ${{ always() && !cancelled() && contains(needs.*.result, 'failure') && (github.ref_name == 'develop' || github.ref_name == 'main') }}
    needs: [daily_run_test]
    environment: 'prod'
    timeout-minutes: 5
    runs-on: self-hosted
    steps:
      - name: notify
        run: |
          curl -X POST -H "Content-Type: application/json" -d '{"msg_type":"post","content":{"post":{"zh_cn":{"title":"Opencompass- Daily test failed","content":[[{"tag":"text","text":"branch: ${{github.ref_name}}, run action: ${{github.workflow}} failed. "},{"tag":"a","text":"Please click here for details ","href":"https://github.com/'${{ github.repository }}'/actions/runs/'${GITHUB_RUN_ID}'"},{"tag":"at","user_id":"'${{ secrets.USER_ID }}'"}]]}}}}'  ${{ secrets.WEBHOOK_URL }}
