mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
ad6609a561
This will fail pipeline earlier if template project of S2 cannot pass the build. The other builds for the template app, which is not CMake or default optimization level are put into the build_template_app of build stage.
196 lines
6.9 KiB
YAML
196 lines
6.9 KiB
YAML
stages:
|
|
- pre_check
|
|
- build
|
|
- assign_test
|
|
- host_test
|
|
- target_test
|
|
- test_deploy
|
|
- post_check
|
|
- deploy
|
|
- post_deploy
|
|
|
|
variables:
|
|
# System environment
|
|
|
|
# Common parameters for the 'make' during CI tests
|
|
MAKEFLAGS: "-j5 --no-keep-going"
|
|
|
|
# GitLab-CI environment
|
|
|
|
# XXX_ATTEMPTS variables (https://docs.gitlab.com/ce/ci/yaml/README.html#job-stages-attempts) are not defined here.
|
|
# Use values from "CI / CD Settings" - "Variables".
|
|
|
|
# GIT_STRATEGY is not defined here.
|
|
# Use an option from "CI / CD Settings" - "General pipelines".
|
|
|
|
# we will download archive for each submodule instead of clone.
|
|
# we don't do "recursive" when fetch submodule as they're not used in CI now.
|
|
GIT_SUBMODULE_STRATEGY: none
|
|
SUBMODULE_FETCH_TOOL: "tools/ci/ci_fetch_submodule.py"
|
|
# by default we will fetch all submodules
|
|
# jobs can overwrite this variable to only fetch submodules they required
|
|
# set to "none" if don't need to fetch submodules
|
|
SUBMODULES_TO_FETCH: "all"
|
|
# tell build system do not check submodule update as we download archive instead of clone
|
|
IDF_SKIP_CHECK_SUBMODULES: 1
|
|
|
|
IDF_PATH: "$CI_PROJECT_DIR"
|
|
BATCH_BUILD: "1"
|
|
V: "0"
|
|
APPLY_BOT_FILTER_SCRIPT: "$CI_PROJECT_DIR/tools/ci/apply_bot_filter.py"
|
|
CHECKOUT_REF_SCRIPT: "$CI_PROJECT_DIR/tools/ci/checkout_project_ref.py"
|
|
|
|
# Docker images
|
|
BOT_DOCKER_IMAGE_TAG: ":latest"
|
|
# target test config file, used by assign test job
|
|
CI_TARGET_TEST_CONFIG_FILE: "$CI_PROJECT_DIR/tools/ci/config/target-test.yml"
|
|
|
|
# Versioned esp-idf-doc env image to use for all document building jobs
|
|
ESP_IDF_DOC_ENV_IMAGE: "$CI_DOCKER_REGISTRY/esp-idf-doc-env:v5"
|
|
|
|
|
|
# before each job, we need to check if this job is filtered by bot stage/job filter
|
|
.apply_bot_filter: &apply_bot_filter
|
|
python $APPLY_BOT_FILTER_SCRIPT || exit 0
|
|
|
|
.setup_tools_unless_target_test: &setup_tools_unless_target_test |
|
|
if [[ -n "$IDF_DONT_USE_MIRRORS" ]]; then
|
|
export IDF_MIRROR_PREFIX_MAP=
|
|
fi
|
|
if [[ "$SETUP_TOOLS" == "1" || "$CI_JOB_STAGE" != "target_test" ]]; then
|
|
tools/idf_tools.py --non-interactive install && eval "$(tools/idf_tools.py --non-interactive export)" || exit 1
|
|
fi
|
|
|
|
.fetch_submodules: &fetch_submodules |
|
|
python $SUBMODULE_FETCH_TOOL -s $SUBMODULES_TO_FETCH
|
|
|
|
before_script:
|
|
- source tools/ci/setup_python.sh
|
|
# apply bot filter in before script
|
|
- *apply_bot_filter
|
|
# add gitlab ssh key
|
|
- mkdir -p ~/.ssh
|
|
- chmod 700 ~/.ssh
|
|
- echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
|
|
- base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
|
|
- chmod 600 ~/.ssh/id_rsa
|
|
- echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
|
|
# Set some options and environment for CI
|
|
- source tools/ci/configure_ci_environment.sh
|
|
- *setup_tools_unless_target_test
|
|
- *fetch_submodules
|
|
|
|
# used for check scripts which we want to run unconditionally
|
|
.before_script_lesser_nofilter:
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: none
|
|
before_script:
|
|
- echo "Not setting up GitLab key, not fetching submodules, not applying bot filter"
|
|
- source tools/ci/setup_python.sh
|
|
- source tools/ci/configure_ci_environment.sh
|
|
|
|
# used for everything else where we want to do no prep, except for bot filter
|
|
.before_script_lesser:
|
|
variables:
|
|
GIT_SUBMODULE_STRATEGY: none
|
|
before_script:
|
|
- echo "Not setting up GitLab key, not fetching submodules"
|
|
- source tools/ci/setup_python.sh
|
|
# apply bot filter in before script
|
|
- *apply_bot_filter
|
|
- source tools/ci/configure_ci_environment.sh
|
|
|
|
.check_job_template:
|
|
stage: pre_check
|
|
image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
|
|
tags:
|
|
- host_test
|
|
dependencies: []
|
|
extends: .before_script_lesser_nofilter
|
|
|
|
.check_job_template_with_filter:
|
|
stage: pre_check
|
|
image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
|
|
tags:
|
|
- host_test
|
|
dependencies: []
|
|
extends: .before_script_lesser
|
|
|
|
.python_lint_template:
|
|
stage: pre_check
|
|
image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
|
|
tags:
|
|
- host_test
|
|
dependencies: []
|
|
|
|
.macos_build_template:
|
|
stage: build
|
|
tags:
|
|
- macos_shell
|
|
dependencies: []
|
|
before_script:
|
|
- *apply_bot_filter
|
|
- $IDF_PATH/tools/idf_tools.py install-python-env
|
|
# On macOS, these tools need to be installed
|
|
- $IDF_PATH/tools/idf_tools.py --non-interactive install cmake ninja
|
|
# This adds tools (compilers) and the version-specific Python environment to PATH
|
|
- *setup_tools_unless_target_test
|
|
# Install packages required by CI scripts into IDF Python environment
|
|
- pip install -r $IDF_PATH/tools/ci/python_packages/ttfw_idf/requirements.txt
|
|
- source tools/ci/configure_ci_environment.sh
|
|
# Part of tools/ci/setup_python.sh; we don't use pyenv on macOS, so can't run the rest of the script.
|
|
- export PYTHONPATH="$IDF_PATH/tools:$IDF_PATH/tools/ci/python_packages:$PYTHONPATH"
|
|
- *fetch_submodules
|
|
|
|
.build_template_app_template:
|
|
stage: build
|
|
image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
|
|
tags:
|
|
- build
|
|
variables:
|
|
BATCH_BUILD: "1"
|
|
LOG_PATH: "${CI_PROJECT_DIR}/log_template_app"
|
|
BUILD_PATH: "${CI_PROJECT_DIR}/build_template_app"
|
|
SIZE_INFO_LOCATION: "$CI_PROJECT_DIR/size_info.txt"
|
|
BUILD_DIR: "@t/@w"
|
|
BUILD_LOG_MAKE: "${LOG_PATH}/make_@t_@w.txt"
|
|
BUILD_LOG_CMAKE: "${LOG_PATH}/cmake_@t_@w.txt"
|
|
BUILD_COMMAND_ARGS: ""
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- log_template_app/*
|
|
- size_info.txt
|
|
- build_template_app/**/size.json
|
|
only:
|
|
variables:
|
|
- $BOT_TRIGGER_WITH_LABEL == null
|
|
- $BOT_LABEL_BUILD
|
|
- $BOT_LABEL_REGULAR_TEST
|
|
script:
|
|
# Set the variable for 'esp-idf-template' testing
|
|
- ESP_IDF_TEMPLATE_GIT=${ESP_IDF_TEMPLATE_GIT:-"https://github.com/espressif/esp-idf-template.git"}
|
|
- ./tools/ci/retry_failed.sh git clone ${ESP_IDF_TEMPLATE_GIT}
|
|
# Try to use the same branch name for esp-idf-template that we're
|
|
# using on esp-idf. If it doesn't exist then just stick to the default branch
|
|
- python $CHECKOUT_REF_SCRIPT esp-idf-template esp-idf-template
|
|
- export PATH="$IDF_PATH/tools:$PATH"
|
|
- export EXTRA_CFLAGS=${PEDANTIC_CFLAGS}
|
|
- export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS}
|
|
# Only do the default cmake build for each target, remaining part are done in the build_template_app job
|
|
- tools/ci/build_template_app.sh ${BUILD_COMMAND_ARGS}
|
|
# Check if there are any stray printf/ets_printf references in WiFi libs
|
|
- cd components/esp_wifi/lib
|
|
- for dir in esp32 esp32s2; do test $(xtensa-esp32-elf-nm $dir/*.a | grep -w printf | wc -l) -eq 0; done;
|
|
- for dir in esp32 esp32s2; do test $(xtensa-esp32-elf-nm $dir/*.a | grep -w ets_printf | wc -l) -eq 0; done;
|
|
|
|
include:
|
|
- '/tools/ci/config/pre_check.yml'
|
|
- '/tools/ci/config/build.yml'
|
|
- '/tools/ci/config/assign-test.yml'
|
|
- '/tools/ci/config/host-test.yml'
|
|
- '/tools/ci/config/target-test.yml'
|
|
- '/tools/ci/config/post_check.yml'
|
|
- '/tools/ci/config/deploy.yml'
|
|
- '/tools/ci/config/post_deploy.yml'
|