ci: apply idf-ci gitlab dynamic-pipeline-variables

Renamed env vars:

- TEST_CASE_FILTERS -> IDF_CI_SELECT_BY_FILTER_EXPR
- BUILD_AND_TEST_ALL_APPS -> IDF_CI_SELECT_ALL_PYTEST_CASES

Removed env vars;

- IS_MR_PIPELINE (could use CI_MERGE_REQUEST_IID)
- REPORT_EXIT_CODE -> IDF_CI_IS_DEBUG_PIPELINE (fail fast)
- PYTEST_IGNORE_COLLECT_IMPORT_ERROR -> always skip import error
This commit is contained in:
Fu Hanxi
2025-06-13 14:08:59 +02:00
parent 0d5b3e60ac
commit c80d0aded4
11 changed files with 18 additions and 62 deletions

View File

@@ -8,11 +8,9 @@ workflow:
- if: $CI_OPEN_MERGE_REQUESTS != null - if: $CI_OPEN_MERGE_REQUESTS != null
variables: variables:
PIPELINE_COMMIT_SHA: $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA PIPELINE_COMMIT_SHA: $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA
IS_MR_PIPELINE: 1
- if: $CI_OPEN_MERGE_REQUESTS == null - if: $CI_OPEN_MERGE_REQUESTS == null
variables: variables:
PIPELINE_COMMIT_SHA: $CI_COMMIT_SHA PIPELINE_COMMIT_SHA: $CI_COMMIT_SHA
IS_MR_PIPELINE: 0
- when: always - when: always
# Place the default settings in `.gitlab/ci/common.yml` instead # Place the default settings in `.gitlab/ci/common.yml` instead

View File

@@ -307,12 +307,9 @@ build_child_pipeline:
- pipeline_variables - pipeline_variables
- generate_build_child_pipeline - generate_build_child_pipeline
variables: variables:
IS_MR_PIPELINE: $IS_MR_PIPELINE
MR_MODIFIED_COMPONENTS: $MR_MODIFIED_COMPONENTS MR_MODIFIED_COMPONENTS: $MR_MODIFIED_COMPONENTS
MR_MODIFIED_FILES: $MR_MODIFIED_FILES MR_MODIFIED_FILES: $MR_MODIFIED_FILES
PARENT_PIPELINE_ID: $CI_PIPELINE_ID PARENT_PIPELINE_ID: $CI_PIPELINE_ID
BUILD_AND_TEST_ALL_APPS: $BUILD_AND_TEST_ALL_APPS
REPORT_EXIT_CODE: $REPORT_EXIT_CODE
# https://gitlab.com/gitlab-org/gitlab/-/issues/214340 # https://gitlab.com/gitlab-org/gitlab/-/issues/214340
inherit: inherit:
variables: false variables: false

View File

@@ -140,11 +140,10 @@ pipeline_variables:
# MODIFIED_FILES is a list of files that changed, could be used everywhere # MODIFIED_FILES is a list of files that changed, could be used everywhere
- MODIFIED_FILES=$(echo "$GIT_DIFF_OUTPUT" | xargs) - MODIFIED_FILES=$(echo "$GIT_DIFF_OUTPUT" | xargs)
- echo "MODIFIED_FILES=$MODIFIED_FILES" >> pipeline.env - echo "MODIFIED_FILES=$MODIFIED_FILES" >> pipeline.env
- echo "REPORT_EXIT_CODE=0" >> pipeline.env
# MR_MODIFIED_FILES and MR_MODIFIED_COMPONENTS are semicolon separated lists that is used in MR only # MR_MODIFIED_FILES and MR_MODIFIED_COMPONENTS are semicolon separated lists that is used in MR only
# for non MR pipeline, these are empty lists # for non MR pipeline, these are empty lists
- | - |
if [ $IS_MR_PIPELINE == "0" ]; then if [ -z "$CI_MERGE_REQUEST_IID" ]; then
echo "MR_MODIFIED_FILES=\"\"" >> pipeline.env echo "MR_MODIFIED_FILES=\"\"" >> pipeline.env
echo "MR_MODIFIED_COMPONENTS=\"\"" >> pipeline.env echo "MR_MODIFIED_COMPONENTS=\"\"" >> pipeline.env
else else
@@ -154,18 +153,9 @@ pipeline_variables:
MR_MODIFIED_COMPONENTS=$(run_cmd python tools/ci/ci_get_mr_info.py components --modified-files $MODIFIED_FILES | tr '\n' ';') MR_MODIFIED_COMPONENTS=$(run_cmd python tools/ci/ci_get_mr_info.py components --modified-files $MODIFIED_FILES | tr '\n' ';')
echo "MR_MODIFIED_COMPONENTS=\"$MR_MODIFIED_COMPONENTS\"" >> pipeline.env echo "MR_MODIFIED_COMPONENTS=\"$MR_MODIFIED_COMPONENTS\"" >> pipeline.env
fi fi
- |
if echo "$CI_MERGE_REQUEST_LABELS" | egrep "(^|,)BUILD_AND_TEST_ALL_APPS(,|$)"; then
echo "BUILD_AND_TEST_ALL_APPS=1" >> pipeline.env
fi
# run full pipeline if testing constraint branch
- |
if [ -n "$CI_PYTHON_CONSTRAINT_BRANCH" ]; then
echo "BUILD_AND_TEST_ALL_APPS=1" >> pipeline.env
fi
- echo "OOCD_DISTRO_URL_ARMHF=$OOCD_DISTRO_URL_ARMHF" >> pipeline.env - echo "OOCD_DISTRO_URL_ARMHF=$OOCD_DISTRO_URL_ARMHF" >> pipeline.env
- echo "OOCD_DISTRO_URL_ARM64=$OOCD_DISTRO_URL_ARM64" >> pipeline.env - echo "OOCD_DISTRO_URL_ARM64=$OOCD_DISTRO_URL_ARM64" >> pipeline.env
- python tools/ci/ci_process_description.py - idf-ci gitlab pipeline-variables >> pipeline.env
- cat pipeline.env - cat pipeline.env
- python tools/ci/artifacts_handler.py upload --type modified_files_and_components_report - python tools/ci/artifacts_handler.py upload --type modified_files_and_components_report
artifacts: artifacts:

View File

@@ -3,6 +3,7 @@
""" """
This file is used in CI generate binary files for different kinds of apps This file is used in CI generate binary files for different kinds of apps
""" """
import argparse import argparse
import os import os
import sys import sys
@@ -259,7 +260,7 @@ if __name__ == '__main__':
os.environ[_k] = _v # type: ignore os.environ[_k] = _v # type: ignore
print(f'env var {_k} set to "{_v}"') print(f'env var {_k} set to "{_v}"')
if os.getenv('IS_MR_PIPELINE') == '0' or os.getenv('BUILD_AND_TEST_ALL_APPS') == '1': if not os.getenv('CI_MERGE_REQUEST_IID') or os.getenv('IDF_CI_SELECT_ALL_PYTEST_CASES') == '1':
print('Build and run all test cases, and compile all cmake apps') print('Build and run all test cases, and compile all cmake apps')
arguments.modified_components = None arguments.modified_components = None
arguments.modified_files = None arguments.modified_files = None

View File

@@ -1,28 +0,0 @@
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import os
import re
import sys
import yaml
if __name__ == '__main__':
description = os.getenv('CI_MERGE_REQUEST_DESCRIPTION', '')
if not description:
sys.exit(0)
pattern = r'^## Dynamic Pipeline Configuration(?:[^`]*?)```(?:\w+)(.*?)```'
result = re.search(pattern, description, re.DOTALL | re.MULTILINE)
if not result:
sys.exit(0)
data = yaml.safe_load(result.group(1))
raise_report_exit_code = False
with open('pipeline.env', 'a+') as f:
if 'Test Case Filters' in data:
raise_report_exit_code = True
test_case_filters = ' or '.join(data.get('Test Case Filters'))
f.write(f'TEST_CASE_FILTERS={test_case_filters}\n')
if raise_report_exit_code:
f.write('REPORT_EXIT_CODE=30\n')

View File

@@ -223,10 +223,10 @@ if __name__ == '__main__':
args = parser.parse_args() args = parser.parse_args()
if test_case_filters := os.getenv('TEST_CASE_FILTERS', None): if test_case_filters := os.getenv('IDF_CI_SELECT_BY_FILTER_EXPR', None):
args.filter_expr = test_case_filters args.filter_expr = test_case_filters
if os.getenv('IS_MR_PIPELINE') == '0' or os.getenv('BUILD_AND_TEST_ALL_APPS') == '1': if not os.getenv('CI_MERGE_REQUEST_IID') or os.getenv('IDF_CI_SELECT_ALL_PYTEST_CASES') == '1':
print('Build and run all test cases, and compile all cmake apps') print('Build and run all test cases, and compile all cmake apps')
args.modified_components = None args.modified_components = None
args.modified_files = None args.modified_files = None

View File

@@ -109,8 +109,7 @@ def get_target_test_jobs(
else: else:
extra_include_yml = ['tools/ci/dynamic_pipelines/templates/generate_target_test_report.yml'] extra_include_yml = ['tools/ci/dynamic_pipelines/templates/generate_target_test_report.yml']
fast_pipeline_flag = int(os.getenv('REPORT_EXIT_CODE', 0)) == 30 if os.getenv('IDF_CI_IS_DEBUG_PIPELINE') == '1':
if fast_pipeline_flag:
extra_include_yml = ['tools/ci/dynamic_pipelines/templates/fast_pipeline.yml'] extra_include_yml = ['tools/ci/dynamic_pipelines/templates/fast_pipeline.yml']
no_env_marker_test_cases.sort() no_env_marker_test_cases.sort()

View File

@@ -20,6 +20,8 @@
needs: needs:
- pipeline: $PARENT_PIPELINE_ID - pipeline: $PARENT_PIPELINE_ID
job: generate_build_child_pipeline job: generate_build_child_pipeline
- pipeline: $PARENT_PIPELINE_ID
job: pipeline_variables
artifacts: artifacts:
paths: paths:
# The other artifacts patterns are defined under tools/ci/artifacts_handler.py # The other artifacts patterns are defined under tools/ci/artifacts_handler.py
@@ -49,6 +51,9 @@
image: $TARGET_TEST_ENV_IMAGE image: $TARGET_TEST_ENV_IMAGE
stage: target_test stage: target_test
timeout: 1 hour timeout: 1 hour
needs:
- pipeline: $PARENT_PIPELINE_ID
job: pipeline_variables
variables: variables:
SUBMODULES_TO_FETCH: "none" SUBMODULES_TO_FETCH: "none"
# set while generating the pipeline # set while generating the pipeline
@@ -70,10 +75,10 @@
paths: paths:
- XUNIT_RESULT*.xml - XUNIT_RESULT*.xml
- pytest-embedded/ - pytest-embedded/
# Child pipeline reports won't be collected in the main one # Child pipeline reports won't be collected in the main one
# https://gitlab.com/groups/gitlab-org/-/epics/8205 # https://gitlab.com/groups/gitlab-org/-/epics/8205
# reports: # reports:
# junit: XUNIT_RESULT.xml # junit: XUNIT_RESULT.xml
when: always when: always
expire_in: 1 week expire_in: 1 week
script: script:

View File

@@ -39,7 +39,6 @@ Pytest Target Test Jobs:
- generate_pytest_child_pipeline - generate_pytest_child_pipeline
variables: variables:
PARENT_PIPELINE_ID: $PARENT_PIPELINE_ID PARENT_PIPELINE_ID: $PARENT_PIPELINE_ID
REPORT_EXIT_CODE: $REPORT_EXIT_CODE
# https://gitlab.com/gitlab-org/gitlab/-/issues/214340 # https://gitlab.com/gitlab-org/gitlab/-/issues/214340
inherit: inherit:
variables: false variables: false

View File

@@ -14,7 +14,6 @@ tools/ci/check_test_files.py
tools/ci/checkout_project_ref.py tools/ci/checkout_project_ref.py
tools/ci/ci_fetch_submodule.py tools/ci/ci_fetch_submodule.py
tools/ci/ci_get_mr_info.py tools/ci/ci_get_mr_info.py
tools/ci/ci_process_description.py
tools/ci/cleanup_ignore_lists.py tools/ci/cleanup_ignore_lists.py
tools/ci/configure_ci_environment.sh tools/ci/configure_ci_environment.sh
tools/ci/deploy_docs.py tools/ci/deploy_docs.py

View File

@@ -6,12 +6,8 @@
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/tools/idf-tools.html # https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/tools/idf-tools.html
# ci # ci
idf-ci==0.1.17
coverage coverage
idf-build-apps
jsonschema jsonschema
junit_xml
python-gitlab
pyyaml
SimpleWebSocketServer
minio
prettytable prettytable