diff --git a/.github/workflows/auto-unittest.yaml b/.github/workflows/auto-unittest.yaml new file mode 100644 index 000000000..33c6acb0e --- /dev/null +++ b/.github/workflows/auto-unittest.yaml @@ -0,0 +1,74 @@ +name: Auto Unit Tests + +on: + pull_request_target: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + # python-version: ['3.9', '3.10', '3.11'] + python-version: ['3.9'] + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' + - name: Install dependencies + run: | + sh tests/scripts/run_install_deps.sh + - name: Run reverse proxy script for ssh service + if: contains(github.ref, '-debugger') + continue-on-error: true + env: + FPR_SERVER_ADDR: ${{ secrets.FPR_SERVER_ADDR }} + FPR_TOKEN: ${{ secrets.FPR_TOKEN }} + FPR_SSH_REMOTE_PORT: ${{ secrets.FPR_SSH_REMOTE_PORT }} + RSA_PUB: ${{ secrets.RSA_PUB }} + SSH_PORT: ${{ vars.SSH_PORT || '22'}} + run: | + echo "Run \"ssh $(whoami)@FPR_SERVER_HOST -p FPR_SSH_REMOTE_PORT\" and \"cd $(pwd)\"" + mkdir -p ~/.ssh/ + echo $RSA_PUB >> ~/.ssh/authorized_keys + chmod 600 ~/.ssh/authorized_keys + wget https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_amd64.tar.gz -O frp.tar.gz + tar xvzf frp.tar.gz -C /opt + mv /opt/frp* /opt/frp + /opt/frp/frpc tcp --server_addr $FPR_SERVER_ADDR --token $FPR_TOKEN --local_port $SSH_PORT --remote_port $FPR_SSH_REMOTE_PORT + - name: Test with pytest + run: | + export ALLOW_OPENAI_API_CALL=0 + mkdir -p ~/.metagpt && cp tests/config2.yaml ~/.metagpt/config2.yaml && cp tests/spark.yaml ~/.metagpt/spark.yaml + pytest tests/ --doctest-modules --cov=./metagpt/ --cov-report=xml:cov.xml --cov-report=html:htmlcov --durations=20 | tee unittest.txt + - name: Show coverage report + run: | + coverage report -m + - name: Show failed tests and overall summary + run: | + grep -E "FAILED tests|ERROR tests|[0-9]+ passed," unittest.txt + failed_count=$(grep -E "FAILED|ERROR" unittest.txt | wc -l) + if [[ "$failed_count" -gt 0 ]]; then + echo "$failed_count failed lines found! Task failed." + exit 1 + fi + - name: Upload pytest test results + uses: actions/upload-artifact@v3 + with: + name: pytest-results-${{ matrix.python-version }} + path: | + ./unittest.txt + ./htmlcov/ + ./tests/data/rsp_cache_new.json + retention-days: 3 + if: ${{ always() }} + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v3 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + if: ${{ always() }} diff --git a/.github/workflows/unittest.yaml b/.github/workflows/unittest.yaml index 87ccbf144..71f359cb7 100644 --- a/.github/workflows/unittest.yaml +++ b/.github/workflows/unittest.yaml @@ -51,6 +51,7 @@ jobs: export ALLOW_OPENAI_API_CALL=0 echo "${{ secrets.METAGPT_KEY_YAML }}" | base64 -d > config/key.yaml mkdir -p ~/.metagpt && echo "${{ secrets.METAGPT_CONFIG2_YAML }}" | base64 -d > ~/.metagpt/config2.yaml + echo "${{ secrets.SPARK_YAML }}" | base64 -d > ~/.metagpt/spark.yaml pytest tests/ --doctest-modules --cov=./metagpt/ --cov-report=xml:cov.xml --cov-report=html:htmlcov --durations=20 | tee unittest.txt - name: Show coverage report run: | diff --git a/tests/config2.yaml b/tests/config2.yaml new file mode 100644 index 000000000..24728d873 --- /dev/null +++ b/tests/config2.yaml @@ -0,0 +1,30 @@ +llm: + base_url: "https://api.openai.com/v1" + api_key: "sk-xxx" + model: "gpt-3.5-turbo-16k" + +search: + api_type: "serpapi" + api_key: "xxx" + +s3: + access_key: "MOCK_S3_ACCESS_KEY" + secret_key: "MOCK_S3_SECRET_KEY" + endpoint: "http://mock:9000" + secure: false + bucket: "mock" + +AZURE_TTS_SUBSCRIPTION_KEY: "xxx" +AZURE_TTS_REGION: "eastus" + +IFLYTEK_APP_ID: "xxx" +IFLYTEK_API_KEY: "xxx" +IFLYTEK_API_SECRET: "xxx" + +METAGPT_TEXT_TO_IMAGE_MODEL_URL: "http://mock.com" + +PYPPETEER_EXECUTABLE_PATH: "/usr/bin/chromium" + +REPAIR_LLM_OUTPUT: true + + diff --git a/tests/spark.yaml b/tests/spark.yaml new file mode 100644 index 000000000..a5bbd98bd --- /dev/null +++ b/tests/spark.yaml @@ -0,0 +1,7 @@ +llm: + api_type: "spark" + app_id: "xxx" + api_key: "xxx" + api_secret: "xxx" + domain: "generalv2" + base_url: "wss://spark-api.xf-yun.com/v3.1/chat" \ No newline at end of file