From 2cf8157cfd76894ac86a5a4c2fc8c9a9faa335b7 Mon Sep 17 00:00:00 2001 From: Wu Jian Gang Date: Thu, 30 Mar 2023 12:02:55 +0800 Subject: [PATCH] ci: Update ci to use idf_build_apps --- .gitlab-ci.yml | 62 ++++--------- .gitlab/ci/build.yml | 209 ++++++++++++++++++++++++++++++++++++++++++ .gitlab/ci/deploy.yml | 21 +++++ .gitlab/ci/rules.yml | 96 +++++++++++++++++++ 4 files changed, 345 insertions(+), 43 deletions(-) create mode 100644 .gitlab/ci/build.yml create mode 100644 .gitlab/ci/deploy.yml create mode 100644 .gitlab/ci/rules.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ce69bad..e70166a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,6 +2,21 @@ stages: - build - deploy +workflow: + rules: + # Disable those non-protected push triggered pipelines + - if: '$CI_COMMIT_REF_NAME != "master" && $CI_COMMIT_BRANCH !~ /^release\/v/ && $CI_COMMIT_TAG !~ /^v\d+\.\d+(\.\d+)?($|-)/ && $CI_PIPELINE_SOURCE == "push"' + when: never + # when running merged result pipelines, it would create a temp commit id. use $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA instead of $CI_COMMIT_SHA. + # Please use PIPELINE_COMMIT_SHA at all places that require a commit sha + - if: $CI_OPEN_MERGE_REQUESTS != null + variables: + PIPELINE_COMMIT_SHA: $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA + - if: $CI_OPEN_MERGE_REQUESTS == null + variables: + PIPELINE_COMMIT_SHA: $CI_COMMIT_SHA + - when: always + variables: ESP_BOX_PATH: "$CI_PROJECT_DIR" BATCH_BUILD: "1" @@ -19,46 +34,7 @@ before_script: - git --version - git submodule update --init --recursive --force -.build_all_examples_script: &build_all_examples_script - - for EXAMPLE in $EXAMPLES; do - - cd $CI_PROJECT_DIR/examples/$EXAMPLE - - echo Building $EXAMPLE - - idf.py fullclean - - idf.py build - - echo Build Complete for $EXAMPLE - - done - -.build_template: - stage: build - tags: - - build - variables: - EXAMPLES: "factory_demo image_display lv_demos mp3_demo watering_demo" - script: - - *build_all_examples_script - -build_idf_v5.0: - extends: .build_template - image: espressif/idf:release-v5.0 - -push_to_github: - stage: deploy - only: - - master - - /^release\/v/ -# when: on_success - image: $CI_DOCKER_REGISTRY/esp32-ci-env - variables: - GIT_STRATEGY: clone - before_script: - - echo "skip default before_script" - script: - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - echo -n $GH_PUSH_KEY > ~/.ssh/id_rsa_base64 - - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa - - chmod 600 ~/.ssh/id_rsa - - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config - - git remote remove github &>/dev/null || true - - git remote add github git@github.com:espressif/esp-box.git - - ${ESP_BOX_PATH}/tools/ci/push_to_github.sh +include: + - '.gitlab/ci/rules.yml' + - '.gitlab/ci/build.yml' + - '.gitlab/ci/deploy.yml' \ No newline at end of file diff --git a/.gitlab/ci/build.yml b/.gitlab/ci/build.yml new file mode 100644 index 0000000..d0f2dcd --- /dev/null +++ b/.gitlab/ci/build.yml @@ -0,0 +1,209 @@ +.build_template: &build_template + stage: build + image: espressif/idf:release-v5.0 + tags: + - build + variables: + # Enable ccache for all build jobs. See configure_ci_environment.sh for more ccache related settings. + IDF_CCACHE_ENABLE: "1" + BATCH_BUILD: "1" + V: "0" + WARNING_STR: "" + +.build_examples_template: &build_examples_template + <<: *build_template + artifacts: + when: always + paths: + - "**/build*/size.json" + - "**/build*/build_log.txt" + - "**/build*/*.bin" + # upload to s3 server to save the artifacts size + - "**/build*/*.map" + - "**/build*/*.elf" + - "**/build*/flasher_args.json" + - "**/build*/flash_project_args" + - "**/build*/config/sdkconfig.json" + - "**/build*/bootloader/*.bin" + - "**/build*/bootloader/*.elf" + - "**/build*/partition_table/*.bin" + - size_info.txt + expire_in: 1 week + variables: + IDF_CI_BUILD: "1" + script: + - pip install --upgrade idf-component-manager + - pip install idf_build_apps + - python -m idf_build_apps build -vv + -p $EXAMPLE_DIR + -t all + --config "sdkconfig.ci.*=" + --build-dir build_@t_@w + --build-log build_log.txt + --size-file size.json + --check-warnings + --ignore-warning-str "$WARNING_STR" + --collect-size-info size_info.txt + --default-build-targets $IDF_TARGET + +build_example_factory_demo_v5.0: + extends: + - .build_examples_template + - .rules:build:example_factory_demo + image: espressif/idf:release-v5.0 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/factory_demo + +build_example_factory_demo_v5.1: + extends: + - .build_examples_template + - .rules:build:example_factory_demo + image: espressif/idf:release-v5.1 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/factory_demo + +build_example_factory_demo_latest: + extends: + - .build_examples_template + - .rules:build:example_factory_demo + image: espressif/idf:latest + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/factory_demo + +build_example_image_display_v5.0: + extends: + - .build_examples_template + - .rules:build:example_image_display + image: espressif/idf:release-v5.0 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/image_display + +build_example_image_display_v5.1: + extends: + - .build_examples_template + - .rules:build:example_image_display + image: espressif/idf:release-v5.1 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/image_display + +build_example_image_display_latest: + extends: + - .build_examples_template + - .rules:build:example_image_display + image: espressif/idf:latest + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/image_display + +build_example_lv_demos_v5.0: + extends: + - .build_examples_template + - .rules:build:example_lv_demos + image: espressif/idf:release-v5.0 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/lv_demos + +build_example_lv_demos_v5.1: + extends: + - .build_examples_template + - .rules:build:example_lv_demos + image: espressif/idf:release-v5.1 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/lv_demos + +build_example_lv_demos_latest: + extends: + - .build_examples_template + - .rules:build:example_lv_demos + image: espressif/idf:latest + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/lv_demos + +build_example_mp3_demo_v5.0: + extends: + - .build_examples_template + - .rules:build:example_mp3_demo + image: espressif/idf:release-v5.0 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/mp3_demo + +build_example_mp3_demo_v5.1: + extends: + - .build_examples_template + - .rules:build:example_mp3_demo + image: espressif/idf:release-v5.1 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/mp3_demo + +build_example_mp3_demo_latest: + extends: + - .build_examples_template + - .rules:build:example_mp3_demo + image: espressif/idf:latest + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/mp3_demo + +build_example_usb_headset_v5.0: + extends: + - .build_examples_template + - .rules:build:example_usb_headset + image: espressif/idf:release-v5.0 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/usb_headset + +build_example_usb_headset_v5.1: + extends: + - .build_examples_template + - .rules:build:example_usb_headset + image: espressif/idf:release-v5.1 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/usb_headset + +build_example_usb_headset_latest: + extends: + - .build_examples_template + - .rules:build:example_usb_headset + image: espressif/idf:latest + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/usb_headset + +build_example_watering_demo_v5.0: + extends: + - .build_examples_template + - .rules:build:example_watering_demo + image: espressif/idf:release-v5.0 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/watering_demo + +build_example_watering_demo_v5.1: + extends: + - .build_examples_template + - .rules:build:example_watering_demo + image: espressif/idf:release-v5.1 + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/watering_demo + +build_example_watering_demo_latest: + extends: + - .build_examples_template + - .rules:build:example_watering_demo + image: espressif/idf:latest + variables: + IDF_TARGET: esp32s3 + EXAMPLE_DIR: examples/watering_demo \ No newline at end of file diff --git a/.gitlab/ci/deploy.yml b/.gitlab/ci/deploy.yml new file mode 100644 index 0000000..29e3c68 --- /dev/null +++ b/.gitlab/ci/deploy.yml @@ -0,0 +1,21 @@ +push_to_github: + stage: deploy + only: + - master + - /^release\/v/ +# when: on_success + image: $CI_DOCKER_REGISTRY/esp32-ci-env + variables: + GIT_STRATEGY: clone + before_script: + - echo "skip default before_script" + script: + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + - echo -n $GH_PUSH_KEY > ~/.ssh/id_rsa_base64 + - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config + - git remote remove github &>/dev/null || true + - git remote add github git@github.com:espressif/esp-box.git + - ${ESP_BOX_PATH}/tools/ci/push_to_github.sh \ No newline at end of file diff --git a/.gitlab/ci/rules.yml b/.gitlab/ci/rules.yml new file mode 100644 index 0000000..2dddfdd --- /dev/null +++ b/.gitlab/ci/rules.yml @@ -0,0 +1,96 @@ +############ +# Patterns # +############ + +# components folder, in the alphabetic order +.patterns-components_bsp: &patterns-components_bsp + - "components/bsp/**/*" + +# examples folder, in the alphabetic order +.patterns-example_factory_demo: &patterns-example_factory_demo + - "examples/factory_demo/**/*" + +.patterns-example_image_display: &patterns-example_image_display + - "examples/image_display/**/*" + +.patterns-example_lv_demos: &patterns-example_lv_demos + - "examples/lv_demos/**/*" + +.patterns-example_mp3_demo: &patterns-example_mp3_demo + - "examples/mp3_demo/**/*" + +.patterns-example_usb_headset: &patterns-example_usb_headset + - "examples/usb_headset/**/*" + +.patterns-example_watering_demo: &patterns-example_watering_demo + - "examples/watering_demo/**/*" + +############## +# if anchors # +############## +.if-protected: &if-protected + if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/ || $CI_COMMIT_TAG =~ /^v\d+\.\d+(\.\d+)?($|-)/)' + +.if-dev-push: &if-dev-push + if: '$CI_COMMIT_REF_NAME != "master" && $CI_COMMIT_BRANCH !~ /^release\/v/ && $CI_COMMIT_TAG !~ /^v\d+\.\d+(\.\d+)?($|-)/ && ($CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "merge_request_event")' + +################## +# Auto Generated # +################## +.if-label-build: &if-label-build + if: '$CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*build(?:,[^,\n\r]+)*$/i' + +# rules for examples +.rules:build:example_factory_demo: + rules: + - <<: *if-protected + - <<: *if-label-build + - <<: *if-dev-push + changes: *patterns-components_bsp + - <<: *if-dev-push + changes: *patterns-example_factory_demo + +.rules:build:example_image_display: + rules: + - <<: *if-protected + - <<: *if-label-build + - <<: *if-dev-push + changes: *patterns-components_bsp + - <<: *if-dev-push + changes: *patterns-example_image_display + +.rules:build:example_lv_demos: + rules: + - <<: *if-protected + - <<: *if-label-build + - <<: *if-dev-push + changes: *patterns-components_bsp + - <<: *if-dev-push + changes: *patterns-example_lv_demos + +.rules:build:example_mp3_demo: + rules: + - <<: *if-protected + - <<: *if-label-build + - <<: *if-dev-push + changes: *patterns-components_bsp + - <<: *if-dev-push + changes: *patterns-example_mp3_demo + +.rules:build:example_usb_headset: + rules: + - <<: *if-protected + - <<: *if-label-build + - <<: *if-dev-push + changes: *patterns-components_bsp + - <<: *if-dev-push + changes: *patterns-example_usb_headset + +.rules:build:example_watering_demo: + rules: + - <<: *if-protected + - <<: *if-label-build + - <<: *if-dev-push + changes: *patterns-components_bsp + - <<: *if-dev-push + changes: *patterns-example_watering_demo \ No newline at end of file