[mosq]: Add IDF MQTT stress tests to mosquitto CI #320
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "mosq: build-tests" | |
on: | |
push: | |
branches: | |
- master | |
pull_request: | |
types: [opened, synchronize, reopened, labeled] | |
jobs: | |
build_mosq: | |
if: contains(github.event.pull_request.labels.*.name, 'mosquitto') || github.event_name == 'push' | |
name: Mosquitto build | |
strategy: | |
matrix: | |
idf_ver: ["latest", "release-v5.3"] | |
runs-on: ubuntu-22.04 | |
container: espressif/idf:${{ matrix.idf_ver }} | |
env: | |
TEST_DIR: components/mosquitto/examples | |
TARGET_TEST: broker | |
TARGET_TEST_DIR: build_esp32_default | |
steps: | |
- name: Checkout esp-protocols | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Build with IDF-${{ matrix.idf_ver }} | |
shell: bash | |
run: | | |
. ${IDF_PATH}/export.sh | |
pip install idf-component-manager idf-build-apps --upgrade | |
python ci/build_apps.py -c ${TEST_DIR} -m components/mosquitto/.build-test-rules.yml | |
# upload only the target test artifacts | |
cd ${TEST_DIR}/${TARGET_TEST} | |
${GITHUB_WORKSPACE}/ci/clean_build_artifacts.sh `pwd`/${TARGET_TEST_DIR} | |
zip -qur artifacts.zip ${TARGET_TEST_DIR} | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: mosq_target_esp32_${{ matrix.idf_ver }} | |
path: ${{ env.TEST_DIR }}/${{ env.TARGET_TEST }}/artifacts.zip | |
if-no-files-found: error | |
test_mosq: | |
# Skip running on forks since it won't have access to secrets | |
if: | | |
github.repository == 'espressif/esp-protocols' && | |
( contains(github.event.pull_request.labels.*.name, 'mosquitto') || github.event_name == 'push' ) | |
name: Mosquitto target test | |
needs: build_mosq | |
strategy: | |
matrix: | |
idf_ver: ["latest", "release-v5.3"] | |
runs-on: | |
- self-hosted | |
- ESP32-ETHERNET-KIT | |
env: | |
TEST_DIR: components/mosquitto/examples/broker | |
TARGET_TEST_DIR: build_esp32_default | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: mosq_target_esp32_${{ matrix.idf_ver }} | |
path: ${{ env.TEST_DIR }}/ci/ | |
- name: Run Test | |
working-directory: ${{ env.TEST_DIR }} | |
run: | | |
python -m pip install pytest-embedded-serial-esp pytest-embedded-idf pytest-rerunfailures pytest-timeout pytest-ignore-test-results | |
unzip ci/artifacts.zip -d ci | |
for dir in `ls -d ci/build_*`; do | |
rm -rf build sdkconfig.defaults | |
mv $dir build | |
python -m pytest --log-cli-level DEBUG --junit-xml=./results_esp32_${{ matrix.idf_ver }}_${dir#"ci/build_"}.xml --target=esp32 | |
done | |
check_consistency: | |
name: Checks that API docs and versions are consistent | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Checks API Docs and versions | |
run: | | |
sudo apt-get update | |
sudo apt-get -y install doxygen | |
pip install esp-doxybook | |
cd components/mosquitto | |
cp api.md api_orig.md | |
./generate_api_docs.sh | |
diff -wB api.md api_orig.md | |
# check version consistency | |
CONFIG_VERSION=$(grep -Po '(?<=#define VERSION ")[^"]*' port/priv_include/config.h) | |
CZ_VERSION=$(grep -Po '(?<=version: )[^"]*' .cz.yaml) | |
COMP_VERSION=$(grep -Po '(?<=version: ")[^"]*' idf_component.yml) | |
if [ "$CONFIG_VERSION" != "v$CZ_VERSION" ] || [ "$CONFIG_VERSION" != "v$COMP_VERSION" ]; then | |
echo "Version mismatch detected:" | |
echo "config.h: $CONFIG_VERSION" | |
echo ".cz.yaml: $CZ_VERSION" | |
echo "idf_component.yml: $COMP_VERSION" | |
exit 1 | |
fi | |
echo "Versions are consistent: $CONFIG_VERSION" | |
build_idf_tests_with_mosq: | |
name: Build IDF tests | |
strategy: | |
matrix: | |
idf_ver: ["latest"] | |
idf_target: ["esp32"] | |
test: [ { app: publish, path: "tools/test_apps/protocols/mqtt/publish_connect_test" }] | |
runs-on: ubuntu-20.04 | |
container: espressif/idf:${{ matrix.idf_ver }} | |
env: | |
TARGET_TEST_DIR: build_esp32_local_broker | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Build ${{ matrix.test.app }} with IDF-${{ matrix.idf_ver }} for ${{ matrix.idf_target }} | |
shell: bash | |
run: | | |
. ${IDF_PATH}/export.sh | |
pip install idf-component-manager idf-build-apps --upgrade | |
export OVERRIDE_PATH=`pwd`/components/mosquitto | |
echo ${OVERRIDE_PATH} | |
sed -i '/espressif\/mosquitto:/a \ \ \ \ override_path: "${OVERRIDE_PATH}"' ${IDF_PATH}/${{matrix.test.path}}/main/idf_component.yml | |
cat ${IDF_PATH}/${{matrix.test.path}}/main/idf_component.yml | |
export PEDANTIC_FLAGS="-DIDF_CI_BUILD -Werror -Werror=deprecated-declarations -Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function" | |
export EXTRA_CFLAGS="${PEDANTIC_FLAGS} -Wstrict-prototypes" | |
export EXTRA_CXXFLAGS="${PEDANTIC_FLAGS}" | |
cd ${IDF_PATH}/${{matrix.test.path}} | |
idf-build-apps find --config sdkconfig.ci.local_broker -vv --target ${{ matrix.idf_target }} --build-dir=${TARGET_TEST_DIR} | |
idf-build-apps build --config sdkconfig.ci.local_broker -vv --target ${{ matrix.idf_target }} --build-dir=${TARGET_TEST_DIR} | |
${GITHUB_WORKSPACE}/ci/clean_build_artifacts.sh `pwd`/${TARGET_TEST_DIR} | |
zip -qur ${GITHUB_WORKSPACE}/artifacts.zip ${TARGET_TEST_DIR} | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: mosq_publish_esp32_${{ matrix.idf_ver }} | |
path: artifacts.zip | |
if-no-files-found: error | |
test_idf_ci_with_mosq: | |
# Skip running on forks since it won't have access to secrets | |
if: | | |
github.repository == 'espressif/esp-protocols' && | |
( contains(github.event.pull_request.labels.*.name, 'mosquitto') || github.event_name == 'push' ) | |
name: Mosquitto IDF target tests | |
needs: build_idf_tests_with_mosq | |
strategy: | |
matrix: | |
idf_ver: ["latest"] | |
runs-on: | |
- self-hosted | |
- ESP32-ETHERNET-KIT | |
env: | |
TEST_DIR: components/mosquitto | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/download-artifact@v4 | |
with: | |
name: mosq_publish_esp32_${{ matrix.idf_ver }} | |
path: ${{ env.TEST_DIR }}/ci/ | |
- name: Run Test | |
working-directory: ${{ env.TEST_DIR }} | |
run: | | |
python -m pip install pytest-embedded-serial-esp pytest-embedded-idf pytest-rerunfailures pytest-timeout pytest-ignore-test-results | |
unzip ci/artifacts.zip -d ci | |
for dir in `ls -d ci/build_*`; do | |
rm -rf build sdkconfig.defaults | |
mv $dir build | |
python -m pytest --log-cli-level DEBUG --junit-xml=./results_esp32_${{ matrix.idf_ver }}_${dir#"ci/build_"}.xml --target=esp32 | |
done |