stages: - build - test - deploy variables: IDF_REPO: ${GITLAB_SSH_SERVER}/idf/esp-idf.git .add_gh_key_remote: &add_gh_key_remote | cit_add_ssh_key "${GH_PUSH_KEY}" git remote remove github || true git remote add github ${GH_PUSH_REPO} before_script: # Use CI Tools - curl -sSL ${CIT_LOADER_URL} | sh - source citools/import_functions # 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 - PATH=$CI_PROJECT_DIR/esp-idf/tools:$PATH - export MQTT_PATH=$CI_PROJECT_DIR .build_template: stage: build tags: - build - internet script: # Replace the IDF's default esp-mqtt with this version - rm -rf $IDF_PATH/components/mqtt/esp-mqtt && cp -r $MQTT_PATH $IDF_PATH/components/mqtt/ # Build the examples - $MQTT_PATH/ci/build_examples.sh build_idf_v5.0: extends: .build_template image: espressif/idf:release-v5.0 build_idf_v5.1: extends: .build_template image: espressif/idf:release-v5.1 build_idf_latest: extends: .build_template image: espressif/idf:latest build_and_host_test: stage: build image: espressif/idf:latest script: # Replace the IDF's default esp-mqtt with this version - rm -rf $IDF_PATH/components/mqtt/esp-mqtt && cp -r $MQTT_PATH $IDF_PATH/components/mqtt/ - cd $IDF_PATH/components/mqtt/esp-mqtt/host_test - idf.py build - build/host_mqtt_client_test.elf build_and_test_qemu: stage: build image: ${CI_DOCKER_REGISTRY}/qemu-v5.1:1-20220802 tags: - build - shiny dependencies: [] script: - export IDF_PATH=$CI_PROJECT_DIR/esp-idf - git clone "${IDF_REPO}" # switch to IDF and setup the tools - $MQTT_PATH/ci/set_idf.sh release/v5.1 - $IDF_PATH/tools/idf_tools.py install-python-env - cd $IDF_PATH && tools/idf_tools.py --non-interactive install && eval "$(tools/idf_tools.py --non-interactive export)" # Remove `debug_backend` and Add `paho-mqtt` to the required packages - sed '/debug_backend/d;/pygobject/d' $IDF_PATH/tools/requirements/requirements.ttfw.txt > requirements.txt - python -m pip install -r requirements.txt - python -m pip install paho-mqtt - $MQTT_PATH/ci/set_mqtt.sh $CI_COMMIT_SHA # build publish-connect stress test, setup test parameters - cd tools/test_apps/protocols/mqtt/publish_connect_test && cat sdkconfig.qemu | $IDF_PATH/tools/ci/envsubst.py > sdkconfig.defaults && idf.py build - export TEST_PATH=`pwd` && export MQTT_PUBLISH_TEST=1 - export PYTHONPATH="$IDF_PATH/tools:$IDF_PATH/tools/ci/python_packages" # run test (with environment->qemu) - cd $IDF_PATH/tools/ci/python_packages/tiny_test_fw/bin # use more relaxed criteria with QEMU tests - export MQTT_PUBLISH_MSG_len_0=0 MQTT_PUBLISH_MSG_repeat_0=5 - export MQTT_PUBLISH_MSG_len_1=2 MQTT_PUBLISH_MSG_repeat_1=50 - export MQTT_PUBLISH_MSG_len_2=128 MQTT_PUBLISH_MSG_repeat_2=2 - export MQTT_PUBLISH_MSG_len_3=20 MQTT_PUBLISH_MSG_repeat_3=20 - python Runner.py $TEST_PATH -c $MQTT_PATH/ci/publish_connect_mqtt_qemu.yml -e $TEST_PATH/env.yml check_remotes_sync: stage: test except: - master - idf script: - *add_gh_key_remote - git fetch --depth=1 origin master - git fetch --depth=1 github master - test "$(git rev-parse origin/master)" == "$(git rev-parse github/master)" push_master_to_github: stage: deploy image: ${CI_DOCKER_REGISTRY}/esp32-ci-env tags: - build only: - master - idf when: on_success variables: GIT_STRATEGY: clone script: - *add_gh_key_remote - git push github HEAD:${CI_COMMIT_REF_NAME}