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 diff --git a/examples/factory_demo/CMakeLists.txt b/examples/factory_demo/CMakeLists.txt index 3e4cbc5..c4e774c 100644 --- a/examples/factory_demo/CMakeLists.txt +++ b/examples/factory_demo/CMakeLists.txt @@ -6,7 +6,7 @@ include($ENV{IDF_PATH}/tools/cmake/project.cmake) set(EXTRA_COMPONENT_DIRS ../../components - $ENV{IDF_PATH}/examples/common_components + $ENV{IDF_PATH}/examples/common_components/protocol_examples_common ) add_compile_options(-fdiagnostics-color=always) diff --git a/examples/factory_demo/main/idf_component.yml b/examples/factory_demo/main/idf_component.yml index b3578ea..bb0d612 100644 --- a/examples/factory_demo/main/idf_component.yml +++ b/examples/factory_demo/main/idf_component.yml @@ -1,5 +1,7 @@ ## IDF Component Manager Manifest File dependencies: + idf: ">=5.0" + chmorgan/esp-audio-player: "1.0.4" chmorgan/esp-file-iterator: "1.0.0" chmorgan/esp-libhelix-mp3: "1.0.3" @@ -11,7 +13,7 @@ dependencies: espressif/esp_schedule: path: components/esp_schedule git: https://github.com/espressif/esp-rainmaker.git - espressif/esp-sr: ^1 + espressif/esp-sr: =1.1.0 espressif/led_strip: version: "~2.0.0" rules: diff --git a/examples/image_display/main/idf_component.yml b/examples/image_display/main/idf_component.yml index aa69202..4a8c512 100644 --- a/examples/image_display/main/idf_component.yml +++ b/examples/image_display/main/idf_component.yml @@ -1,3 +1,4 @@ ## IDF Component Manager Manifest File dependencies: + idf: ">=5.0" espressif/esp-box: "2.*" \ No newline at end of file diff --git a/examples/lv_demos/main/idf_component.yml b/examples/lv_demos/main/idf_component.yml index aa69202..4a8c512 100644 --- a/examples/lv_demos/main/idf_component.yml +++ b/examples/lv_demos/main/idf_component.yml @@ -1,3 +1,4 @@ ## IDF Component Manager Manifest File dependencies: + idf: ">=5.0" espressif/esp-box: "2.*" \ No newline at end of file diff --git a/examples/mp3_demo/main/idf_component.yml b/examples/mp3_demo/main/idf_component.yml index 029d9d7..f628bc9 100644 --- a/examples/mp3_demo/main/idf_component.yml +++ b/examples/mp3_demo/main/idf_component.yml @@ -1,5 +1,6 @@ ## IDF Component Manager Manifest File dependencies: + idf: ">=5.0" chmorgan/esp-libhelix-mp3: "1.0.3" chmorgan/esp-file-iterator: "1.0.0" chmorgan/esp-audio-player: "1.0.4" diff --git a/examples/usb_headset/main/idf_component.yml b/examples/usb_headset/main/idf_component.yml index 78b606f..5cbc85d 100644 --- a/examples/usb_headset/main/idf_component.yml +++ b/examples/usb_headset/main/idf_component.yml @@ -1,6 +1,6 @@ ## IDF Component Manager Manifest File dependencies: - idf: ">=4.4.1" + idf: ">=5.0" espressif/es7210: "^1.0.1" espressif/esp-dsp: "^1.2.1" espressif/esp-box: "2.*" diff --git a/examples/watering_demo/main/idf_component.yml b/examples/watering_demo/main/idf_component.yml index 1f70a87..2787db5 100644 --- a/examples/watering_demo/main/idf_component.yml +++ b/examples/watering_demo/main/idf_component.yml @@ -1,12 +1,13 @@ ## IDF Component Manager Manifest File dependencies: + idf: ">=5.0" espressif/esp_rainmaker: path: components/esp_rainmaker git: https://github.com/espressif/esp-rainmaker.git espressif/esp_schedule: path: components/esp_schedule git: https://github.com/espressif/esp-rainmaker.git - espressif/esp-sr: ^1 + espressif/esp-sr: =1.1.0 espressif/json_generator: ^1 espressif/json_parser: =1.0.0 espressif/qrcode: ^0.1.0