diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ccbd7c2c94..739ddf1ab8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -95,6 +95,9 @@ variables: # This is used only if CI_PYTHON_TOOL_REPO is not empty. CI_PYTHON_TOOL_BRANCH: "" + # Set this variable to specify the file name for the known failure cases. + KNOWN_FAILURE_CASES_FILE_NAME: "5.1.txt" + IDF_CI_BUILD: 1 cache: diff --git a/.gitlab/ci/host-test.yml b/.gitlab/ci/host-test.yml index 917866b3e7..b939a57c55 100644 --- a/.gitlab/ci/host-test.yml +++ b/.gitlab/ci/host-test.yml @@ -316,13 +316,13 @@ test_pytest_qemu: --target esp32 --pytest-apps -m qemu - - retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases + - python tools/ci/get_known_failure_cases_file.py - pytest --target esp32 -m qemu --embedded-services idf,qemu --junitxml=XUNIT_RESULT.xml - --known-failure-cases-file known_failure_cases/known_failure_cases.txt + --known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME} test_pytest_linux: extends: @@ -341,6 +341,6 @@ test_pytest_linux: --target linux --pytest-apps -m host_test - - retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases + - python tools/ci/get_known_failure_cases_file.py - run_cmd pytest --target linux -m host_test --junitxml=XUNIT_RESULT.xml - --known-failure-cases-file known_failure_cases/known_failure_cases.txt + --known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME} diff --git a/.gitlab/ci/target-test.yml b/.gitlab/ci/target-test.yml index 0082685b12..abfe6cc16c 100644 --- a/.gitlab/ci/target-test.yml +++ b/.gitlab/ci/target-test.yml @@ -24,7 +24,7 @@ junit: XUNIT_RESULT.xml expire_in: 1 week script: - - retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases + - python tools/ci/get_known_failure_cases_file.py # get runner env config file - retry_failed git clone $TEST_ENV_CONFIG_REPO - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs ci-test-runner-configs @@ -35,7 +35,7 @@ - run_cmd pytest $TEST_DIR -m \"${markers}\" --junitxml=XUNIT_RESULT.xml - --known-failure-cases-file known_failure_cases/known_failure_cases.txt + --known-failure-cases-file ${KNOWN_FAILURE_CASES_FILE_NAME} --parallel-count ${CI_NODE_TOTAL:-1} --parallel-index ${CI_NODE_INDEX:-1} ${PYTEST_EXTRA_FLAGS} @@ -1160,10 +1160,10 @@ pytest_test_apps_esp32s3_mspi_f4r4: - retry_failed git clone $TEST_ENV_CONFIG_REPO - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs ci-test-runner-configs # git clone the known failure cases repo, run test - - retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases + - python tools/ci/get_known_failure_cases_file.py # run test - cd tools/ci/python_packages/tiny_test_fw/bin - - run_cmd python Runner.py $TEST_CASE_PATH -c $CONFIG_FILE -e $ENV_FILE --known_failure_cases_file $CI_PROJECT_DIR/known_failure_cases/known_failure_cases.txt + - run_cmd python Runner.py $TEST_CASE_PATH -c $CONFIG_FILE -e $ENV_FILE --known_failure_cases_file $CI_PROJECT_DIR/${KNOWN_FAILURE_CASES_FILE_NAME} .example_test_template: extends: .target_test_job_template diff --git a/tools/ci/exclude_check_tools_files.txt b/tools/ci/exclude_check_tools_files.txt index f74fe7bf91..dc994dff86 100644 --- a/tools/ci/exclude_check_tools_files.txt +++ b/tools/ci/exclude_check_tools_files.txt @@ -40,4 +40,5 @@ tools/mocks/**/* tools/set-submodules-to-github.sh tools/templates/sample_component/CMakeLists.txt tools/templates/sample_component/include/main.h +tools/ci/get_known_failure_cases_file.py tools/templates/sample_component/main.c diff --git a/tools/ci/get_known_failure_cases_file.py b/tools/ci/get_known_failure_cases_file.py new file mode 100644 index 0000000000..056ec2c51d --- /dev/null +++ b/tools/ci/get_known_failure_cases_file.py @@ -0,0 +1,37 @@ +# SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + +import os + +import urllib3 +from minio import Minio + + +def getenv(env_var: str) -> str: + try: + return os.environ[env_var] + except KeyError as e: + raise Exception(f'Environment variable {env_var} not set') from e + + +def get_minio_client() -> Minio: + return Minio( + getenv('IDF_S3_SERVER').replace('https://', ''), + access_key=getenv('IDF_S3_ACCESS_KEY'), + secret_key=getenv('IDF_S3_SECRET_KEY'), + http_client=urllib3.PoolManager( + num_pools=10, + timeout=urllib3.Timeout.DEFAULT_TIMEOUT, + retries=urllib3.Retry( + total=5, + backoff_factor=0.2, + status_forcelist=[500, 502, 503, 504], + ), + ), + ) + + +if __name__ == '__main__': + client = get_minio_client() + file_name = getenv('KNOWN_FAILURE_CASES_FILE_NAME') + client.fget_object('ignore-test-result-files', file_name, file_name) diff --git a/tools/requirements/requirements.ci.txt b/tools/requirements/requirements.ci.txt index f40bb9e205..a77dd7fd99 100644 --- a/tools/requirements/requirements.ci.txt +++ b/tools/requirements/requirements.ci.txt @@ -9,3 +9,4 @@ junit_xml python-gitlab pyyaml SimpleWebSocketServer +minio