diff --git a/.gitlab/ci/build.yml b/.gitlab/ci/build.yml index abb077d38a..750f04f6f9 100644 --- a/.gitlab/ci/build.yml +++ b/.gitlab/ci/build.yml @@ -516,10 +516,10 @@ build_clang_test_apps_esp32c6: script: - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh - cd ${IDF_PATH}/tools/test_build_system - - retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases + - python ${IDF_PATH}/tools/ci/get_known_failure_cases_file.py - pytest --parallel-count ${CI_NODE_TOTAL:-1} --parallel-index ${CI_NODE_INDEX:-1} --work-dir ${CI_PROJECT_DIR}/test_build_system --junitxml=${CI_PROJECT_DIR}/XUNIT_RESULT.xml - --ignore-result-files known_failure_cases/known_failure_cases.txt + --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} pytest_build_system: extends: .test_build_system_template diff --git a/.gitlab/ci/common.yml b/.gitlab/ci/common.yml index c89f6f47d3..4e326d675c 100644 --- a/.gitlab/ci/common.yml +++ b/.gitlab/ci/common.yml @@ -80,6 +80,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.2.txt" + IDF_CI_BUILD: 1 ################################################ diff --git a/.gitlab/ci/host-test.yml b/.gitlab/ci/host-test.yml index fee0070f2e..49ece921d7 100644 --- a/.gitlab/ci/host-test.yml +++ b/.gitlab/ci/host-test.yml @@ -307,13 +307,13 @@ test_pytest_qemu: --collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt" --modified-components ${MODIFIED_COMPONENTS} --modified-files ${MODIFIED_FILES} - - retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases + - python tools/ci/get_known_failure_cases_file.py - run_cmd pytest --target $IDF_TARGET -m qemu --embedded-services idf,qemu --junitxml=XUNIT_RESULT.xml - --ignore-result-files known_failure_cases/known_failure_cases.txt + --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} --app-info-filepattern \"list_job_*.txt\" test_pytest_linux: @@ -337,10 +337,10 @@ test_pytest_linux: --collect-app-info "list_job_${CI_JOB_NAME_SLUG}.txt" --modified-components ${MODIFIED_COMPONENTS} --modified-files ${MODIFIED_FILES} - - 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 - --ignore-result-files known_failure_cases/known_failure_cases.txt + --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} --app-info-filepattern \"list_job_*.txt\" diff --git a/.gitlab/ci/target-test.yml b/.gitlab/ci/target-test.yml index af65d00cf0..afeddd28d5 100644 --- a/.gitlab/ci/target-test.yml +++ b/.gitlab/ci/target-test.yml @@ -26,7 +26,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 @@ -46,7 +46,7 @@ - run_cmd pytest $TEST_DIR -m \"${markers}\" --junitxml=XUNIT_RESULT.xml - --ignore-result-files known_failure_cases/known_failure_cases.txt + --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} --parallel-count ${CI_NODE_TOTAL:-1} --parallel-index ${CI_NODE_INDEX:-1} ${PYTEST_EXTRA_FLAGS} @@ -1261,7 +1261,7 @@ pytest_examples_openthread_br: artifacts: false tags: [ esp32c6, openthread_br ] 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 @@ -1276,7 +1276,7 @@ pytest_examples_openthread_br: - run_cmd pytest $TEST_DIR -m \"${markers}\" --junitxml=XUNIT_RESULT.xml - --ignore-result-files known_failure_cases/known_failure_cases.txt + --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} --parallel-count ${CI_NODE_TOTAL:-1} --parallel-index ${CI_NODE_INDEX:-1} ${PYTEST_EXTRA_FLAGS} @@ -1295,7 +1295,7 @@ pytest_examples_openthread_bbr: artifacts: false tags: [ esp32c6, openthread_bbr ] 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 @@ -1310,7 +1310,7 @@ pytest_examples_openthread_bbr: - run_cmd pytest $TEST_DIR -m \"${markers}\" --junitxml=XUNIT_RESULT.xml - --ignore-result-files known_failure_cases/known_failure_cases.txt + --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} --parallel-count ${CI_NODE_TOTAL:-1} --parallel-index ${CI_NODE_INDEX:-1} ${PYTEST_EXTRA_FLAGS} @@ -1327,7 +1327,7 @@ pytest_examples_openthread_sleep: artifacts: false tags: [ esp32c6, openthread_sleep ] 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 @@ -1341,7 +1341,7 @@ pytest_examples_openthread_sleep: - run_cmd pytest $TEST_DIR -m \"${markers}\" --junitxml=XUNIT_RESULT.xml - --ignore-result-files known_failure_cases/known_failure_cases.txt + --ignore-result-files ${KNOWN_FAILURE_CASES_FILE_NAME} --parallel-count ${CI_NODE_TOTAL:-1} --parallel-index ${CI_NODE_INDEX:-1} ${PYTEST_EXTRA_FLAGS} diff --git a/tools/ci/artifacts_handler.py b/tools/ci/artifacts_handler.py index 73930a3a05..23524f917a 100644 --- a/tools/ci/artifacts_handler.py +++ b/tools/ci/artifacts_handler.py @@ -1,6 +1,5 @@ -# SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD +# SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD # SPDX-License-Identifier: Apache-2.0 - import argparse import fnmatch import glob @@ -66,6 +65,23 @@ def getenv(env_var: str) -> str: 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], + ), + ), + ) + + def _download_files( pipeline_id: int, *, @@ -168,19 +184,7 @@ if __name__ == '__main__': args = parser.parse_args() - client = 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( - timeout=urllib3.Timeout.DEFAULT_TIMEOUT, - retries=urllib3.Retry( - total=5, - backoff_factor=0.2, - status_forcelist=[500, 502, 503, 504], - ), - ), - ) + client = get_minio_client() ci_pipeline_id = args.pipeline_id or getenv('CI_PIPELINE_ID') # required if args.action == 'download': diff --git a/tools/ci/exclude_check_tools_files.txt b/tools/ci/exclude_check_tools_files.txt index 01f0f5a95c..bc115510b4 100644 --- a/tools/ci/exclude_check_tools_files.txt +++ b/tools/ci/exclude_check_tools_files.txt @@ -40,4 +40,5 @@ tools/templates/sample_component/include/main.h tools/templates/sample_component/main.c tools/ci/cleanup_ignore_lists.py tools/ci/artifacts_handler.py +tools/ci/get_known_failure_cases_file.py tools/unit-test-app/**/* 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..47bd700511 --- /dev/null +++ b/tools/ci/get_known_failure_cases_file.py @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + +import os + +from artifacts_handler import get_minio_client + + +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 + + +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)