| # Copyright (c) 2020-2021 Project CHIP Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| name: Builds |
| |
| on: |
| push: |
| pull_request: |
| workflow_dispatch: |
| |
| concurrency: |
| group: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.event.number) || (github.event_name == 'workflow_dispatch' && github.run_number) || github.sha }} |
| cancel-in-progress: true |
| |
| env: |
| CHIP_NO_LOG_TIMESTAMPS: true |
| |
| jobs: |
| |
| build_linux_gcc_debug: |
| name: Build on Linux (gcc_debug) |
| timeout-minutes: 85 |
| |
| runs-on: ubuntu-latest |
| if: github.actor != 'restyled-io[bot]' |
| |
| container: |
| image: connectedhomeip/chip-build:0.6.34 |
| volumes: |
| - "/tmp/log_output:/tmp/test_logs" |
| options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 |
| net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" |
| |
| steps: |
| - name: Dump GitHub context |
| env: |
| GITHUB_CONTEXT: ${{ toJSON(github) }} |
| run: echo "$GITHUB_CONTEXT" |
| - name: Dump Concurrency context |
| env: |
| CONCURRENCY_CONTEXT: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.event.number) || (github.event_name == 'workflow_dispatch' && github.run_number) || github.sha }} |
| run: echo "$CONCURRENCY_CONTEXT" |
| - uses: Wandalen/wretry.action@v1.0.36 |
| name: Checkout |
| with: |
| action: actions/checkout@v3 |
| with: | |
| token: ${{ github.token }} |
| attempt_limit: 3 |
| attempt_delay: 2000 |
| - name: Checkout submodules |
| run: scripts/checkout_submodules.py --shallow --platform linux |
| - name: Try to ensure the directories for core dumping exist and we |
| can write them. |
| run: | |
| mkdir /tmp/cores || true |
| sysctl -w kernel.core_pattern=/tmp/cores/core.%u.%p.%t || true |
| - name: Bootstrap |
| timeout-minutes: 10 |
| run: scripts/build/gn_bootstrap.sh |
| - name: Uploading bootstrap logs |
| uses: actions/upload-artifact@v3 |
| if: ${{ always() && !env.ACT }} |
| with: |
| name: bootstrap-logs |
| path: | |
| .environment/gn_out/.ninja_log |
| .environment/pigweed-venv/*.log |
| - name: Setup Build |
| run: scripts/build/gn_gen.sh --args="chip_config_memory_debug_checks=true chip_config_memory_debug_dmalloc=false" |
| - name: Run Build |
| timeout-minutes: 20 |
| run: scripts/run_in_build_env.sh "ninja -C ./out" |
| - name: Run Tests |
| timeout-minutes: 30 |
| run: scripts/tests/gn_tests.sh |
| # TODO Log Upload https://github.com/project-chip/connectedhomeip/issues/2227 |
| # TODO https://github.com/project-chip/connectedhomeip/issues/1512 |
| # - name: Run Code Coverage |
| # if: ${{ contains('main', env.BUILD_TYPE) }} |
| # run: scripts/tools/codecoverage.sh |
| # - name: Upload Code Coverage |
| # if: ${{ contains('main', env.BUILD_TYPE) }} |
| # run: bash <(curl -s https://codecov.io/bash) |
| - name: Setup Build Without Detail Logging |
| run: scripts/build/gn_gen.sh --args="chip_detail_logging=false" |
| - name: Run Build Without Detail Logging |
| timeout-minutes: 20 |
| run: scripts/run_in_build_env.sh "ninja -C ./out" |
| - name: Setup Build Without Progress Logging |
| run: scripts/build/gn_gen.sh --args="chip_detail_logging=false chip_progress_logging=false" |
| - name: Run Build Without Progress Logging |
| timeout-minutes: 20 |
| run: scripts/run_in_build_env.sh "ninja -C ./out" |
| - name: Setup Build Without Error Logging |
| run: scripts/build/gn_gen.sh --args="chip_detail_logging=false chip_progress_logging=false chip_error_logging=false" |
| - name: Run Build Without Error Logging |
| timeout-minutes: 20 |
| run: scripts/run_in_build_env.sh "ninja -C ./out" |
| - name: Uploading core files |
| uses: actions/upload-artifact@v3 |
| if: ${{ failure() && !env.ACT }} |
| with: |
| name: crash-core-linux-gcc-debug |
| path: /tmp/cores/ |
| # Cores are big; don't hold on to them too long. |
| retention-days: 5 |
| # OBJDIR on linux is > 10K files and takes more than 50 minutes to upload, usually |
| # having the job timeout. |
| # |
| # If re-enabling, some subset of this should be picked |
| # |
| # - name: Uploading objdir for debugging |
| # uses: actions/upload-artifact@v3 |
| # if: ${{ failure() && !env.ACT }} |
| # with: |
| # name: crash-objdir-linux-gcc-debug |
| # path: out/ |
| # # objdirs are big; don't hold on to them too long. |
| # retention-days: 5 |
| |
| build_linux: |
| name: Build on Linux (fake, gcc_release, clang, simulated) |
| timeout-minutes: 150 |
| |
| runs-on: ubuntu-latest |
| if: github.actor != 'restyled-io[bot]' |
| |
| container: |
| image: connectedhomeip/chip-build:0.6.34 |
| volumes: |
| - "/tmp/log_output:/tmp/test_logs" |
| options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 |
| net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" |
| |
| steps: |
| - name: Dump GitHub context |
| env: |
| GITHUB_CONTEXT: ${{ toJSON(github) }} |
| run: echo "$GITHUB_CONTEXT" |
| - name: Dump Concurrency context |
| env: |
| CONCURRENCY_CONTEXT: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.event.number) || (github.event_name == 'workflow_dispatch' && github.run_number) || github.sha }} |
| run: echo "$CONCURRENCY_CONTEXT" |
| - uses: Wandalen/wretry.action@v1.0.36 |
| name: Checkout |
| with: |
| action: actions/checkout@v3 |
| with: | |
| token: ${{ github.token }} |
| attempt_limit: 3 |
| attempt_delay: 2000 |
| # - name: Initialize CodeQL |
| # if: ${{ github.event_name == 'push' && github.event.ref == 'refs/heads/master' }} |
| # uses: github/codeql-action/init@v1 |
| # with: |
| # languages: "cpp" |
| - name: Checkout submodules |
| run: scripts/checkout_submodules.py --shallow --platform linux |
| - name: Try to ensure the directories for core dumping exist and we |
| can write them. |
| run: | |
| mkdir /tmp/cores || true |
| sysctl -w kernel.core_pattern=/tmp/cores/core.%u.%p.%t || true |
| - name: Bootstrap |
| timeout-minutes: 10 |
| run: scripts/build/gn_bootstrap.sh |
| - name: Uploading bootstrap logs |
| uses: actions/upload-artifact@v3 |
| if: ${{ always() && !env.ACT }} |
| with: |
| name: bootstrap-logs |
| path: | |
| .environment/gn_out/.ninja_log |
| .environment/pigweed-venv/*.log |
| - name: Setup and Build Simulated Device |
| timeout-minutes: 20 |
| run: | |
| BUILD_TYPE=simulated |
| GN_ARGS='chip_tests_zap_config="app1" chip_project_config_include_dirs=["../../examples/placeholder/linux/apps/app1/include", "../../config/standalone"] chip_config_network_layer_ble=false' |
| CHIP_ROOT_PATH=examples/placeholder/linux |
| CHIP_ROOT_PATH="$CHIP_ROOT_PATH" BUILD_TYPE="$BUILD_TYPE" scripts/build/gn_gen.sh --args="$GN_ARGS" |
| scripts/run_in_build_env.sh "ninja -C ./out/$BUILD_TYPE" |
| - name: Setup Build, Run Build and Run Tests |
| timeout-minutes: 90 |
| run: | |
| BUILD_TYPE=gcc_release scripts/build/gn_gen.sh --args="is_debug=false" |
| scripts/run_in_build_env.sh "ninja -C ./out/gcc_release" |
| BUILD_TYPE=gcc_release scripts/tests/gn_tests.sh |
| - name: Run Tests with sanitizers |
| timeout-minutes: 60 |
| env: |
| LSAN_OPTIONS: detect_leaks=1 |
| run: | |
| for BUILD_TYPE in asan tsan ubsan; do |
| case $BUILD_TYPE in |
| "asan") GN_ARGS='is_clang=true is_asan=true';; |
| "msan") GN_ARGS='is_clang=true is_msan=true';; |
| "tsan") GN_ARGS='is_clang=true is_tsan=true chip_enable_wifi=false';; |
| "ubsan") GN_ARGS='is_clang=true is_ubsan=true';; |
| esac |
| |
| rm -rf ./out/sanitizers |
| BUILD_TYPE=sanitizers scripts/build/gn_gen.sh --args="$GN_ARGS" --export-compile-commands |
| BUILD_TYPE=sanitizers scripts/tests/gn_tests.sh |
| done |
| - name: Ensure codegen is done for sanitize |
| timeout-minutes: 45 |
| run: | |
| ./scripts/run_in_build_env.sh "./scripts/run_codegen_targets.sh out/sanitizers" |
| - name: Clang-tidy validation |
| timeout-minutes: 45 |
| run: | |
| ./scripts/run_in_build_env.sh \ |
| "./scripts/run-clang-tidy-on-compile-commands.py \ |
| --compile-database out/sanitizers/compile_commands.json \ |
| --file-exclude-regex '/(repo|zzz_generated|lwip/standalone)/' \ |
| check \ |
| " |
| - name: Build using build_examples.py |
| timeout-minutes: 60 |
| run: | |
| ./scripts/run_in_build_env.sh \ |
| "./scripts/build/build_examples.py \ |
| --target linux-x64-minmdns-ipv6only-clang \ |
| --target linux-x64-rpc-console \ |
| build \ |
| " |
| - name: Create a pre-generate directory and ensure compile-time codegen would fail |
| run: | |
| ./scripts/run_in_build_env.sh "./scripts/codepregen.py ./zzz_pregenerated" |
| mv scripts/codegen.py scripts/codegen.py.renamed |
| - name: Build using build_examples.py (pregen) |
| timeout-minutes: 60 |
| run: | |
| ./scripts/run_in_build_env.sh \ |
| "./scripts/build/build_examples.py \ |
| --target linux-x64-all-clusters-ipv6only-clang \ |
| --target linux-x64-chip-tool-ipv6only-clang \ |
| --pregen-dir ./zzz_pregenerated \ |
| build \ |
| " |
| - name: Check no code generation in output |
| run: | |
| CNT=$(find -name "CHIPClusters.h" out | wc -l) |
| if [ "${CNT}" != "0" ]; then |
| echo "ERROR: found unexpected generated files:" |
| find -name "CHIPClusters.h" out |
| exit 1 |
| fi |
| - name: Undo code pre-generation changes (make compile time codegen work again) |
| run: | |
| rm -rf ./zzz_pregenerated |
| mv scripts/codegen.py.renamed scripts/codegen.py |
| - name: Run fake linux tests with build_examples |
| timeout-minutes: 15 |
| run: | |
| ./scripts/run_in_build_env.sh \ |
| "./scripts/build/build_examples.py --target linux-fake-tests build" |
| - name: Uploading core files |
| uses: actions/upload-artifact@v3 |
| if: ${{ failure() && !env.ACT }} |
| with: |
| name: crash-core-linux |
| path: /tmp/cores/ |
| # Cores are big; don't hold on to them too long. |
| retention-days: 5 |
| # OBJDIR on linux is > 10K files and takes more than 50 minutes to upload, usually |
| # having the job timeout. |
| # |
| # If re-enabling, some subset of this should be picked |
| # |
| # - name: Uploading objdir for debugging |
| # uses: actions/upload-artifact@v3 |
| # if: ${{ failure() && !env.ACT }} |
| # with: |
| # name: crash-objdir-linux |
| # path: out/ |
| # # objdirs are big; don't hold on to them too long. |
| # retention-days: 5 |
| |
| build_linux_python_lib: |
| name: Build on Linux (python_lib) |
| timeout-minutes: 60 |
| |
| runs-on: ubuntu-latest |
| if: github.actor != 'restyled-io[bot]' |
| |
| container: |
| image: connectedhomeip/chip-build:0.6.34 |
| volumes: |
| - "/tmp/log_output:/tmp/test_logs" |
| options: --sysctl "net.ipv6.conf.all.disable_ipv6=0 |
| net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" |
| |
| steps: |
| - name: Dump GitHub context |
| env: |
| GITHUB_CONTEXT: ${{ toJSON(github) }} |
| run: echo "$GITHUB_CONTEXT" |
| - name: Dump Concurrency context |
| env: |
| CONCURRENCY_CONTEXT: ${{ github.ref }}-${{ github.workflow }}-${{ (github.event_name == 'pull_request' && github.event.number) || (github.event_name == 'workflow_dispatch' && github.run_number) || github.sha }} |
| run: echo "$CONCURRENCY_CONTEXT" |
| - uses: Wandalen/wretry.action@v1.0.36 |
| name: Checkout |
| with: |
| action: actions/checkout@v3 |
| with: | |
| token: ${{ github.token }} |
| attempt_limit: 3 |
| attempt_delay: 2000 |
| - name: Checkout submodules |
| run: scripts/checkout_submodules.py --shallow --platform linux |
| - name: Bootstrap |
| timeout-minutes: 10 |
| run: scripts/build/gn_bootstrap.sh |
| - name: Setup Build, Run Build and Run Tests |
| timeout-minutes: 50 |
| run: | |
| scripts/build/gn_gen.sh --args="enable_rtti=true enable_pylib=true chip_config_memory_debug_checks=false chip_config_memory_debug_dmalloc=false" |
| scripts/run_in_build_env.sh "ninja -C ./out" |
| scripts/tests/gn_tests.sh |
| - name: Run Python library specific unit tests |
| timeout-minutes: 5 |
| run: | |
| scripts/run_in_build_env.sh 'pip3 install ./out/controller/python/chip_core-0.0-cp37-abi3-linux_x86_64.whl' |
| scripts/run_in_build_env.sh 'pip3 install ./out/controller/python/chip_clusters-0.0-py3-none-any.whl' |
| scripts/run_in_build_env.sh 'pip3 install ./out/controller/python/chip_repl-0.0-py3-none-any.whl' |
| scripts/run_in_build_env.sh '(cd src/controller/python/test/unit_tests/ && python3 -m unittest -v)' |
| |
| - name: Run Python Setup Payload Generator Test |
| timeout-minutes: 10 |
| run: | |
| scripts/run_in_build_env.sh 'scripts/examples/gn_build_example.sh examples/chip-tool out/' |
| scripts/run_in_build_env.sh 'pip3 install -r src/setup_payload/python/requirements.txt' |
| scripts/run_in_build_env.sh 'python3 src/setup_payload/tests/run_python_setup_payload_gen_test.py out/chip-tool' |
| |
| build_darwin: |
| name: Build on Darwin (clang, python_lib, simulated) |
| timeout-minutes: 200 |
| runs-on: macos-latest |
| if: github.actor != 'restyled-io[bot]' |
| |
| env: |
| # NOTE: Generally kept in sync within the repo using |
| # scripts/tools/zap/version_update.py |
| ZAP_VERSION: v2023.01.19-nightly |
| ZAP_INSTALL_PATH: /usr/local/zap/zap-v2023.01.19-nightly |
| |
| steps: |
| - uses: Wandalen/wretry.action@v1.0.36 |
| name: Checkout |
| with: |
| action: actions/checkout@v3 |
| with: | |
| token: ${{ github.token }} |
| attempt_limit: 3 |
| attempt_delay: 2000 |
| #- name: Initialize CodeQL |
| # if: ${{ github.event_name == 'push' && github.event.ref == 'refs/heads/master' }} |
| # uses: github/codeql-action/init@v1 |
| # with: |
| # languages: "cpp" |
| - name: Checkout submodules |
| run: scripts/checkout_submodules.py --shallow --platform darwin |
| - name: Setup Environment |
| run: brew install openssl pkg-config |
| - name: Try to ensure the directory for diagnostic log collection exists |
| run: | |
| mkdir -p ~/Library/Logs/DiagnosticReports || true |
| - name: Fix pkgconfig link |
| working-directory: /usr/local/lib/pkgconfig |
| run: | |
| pwd |
| ls -la /usr/local/Cellar/ |
| ls -la /usr/local/Cellar/openssl@1.1 |
| OPEN_SSL_VERSION=`ls -la /usr/local/Cellar/openssl@1.1 | cat | tail -n1 | awk '{print $NF}'` |
| ln -s /usr/local/Cellar/openssl@1.1/$OPEN_SSL_VERSION/lib/pkgconfig/* . |
| - name: Install zap |
| run: | |
| sudo mkdir -p $ZAP_INSTALL_PATH |
| sudo chown `whoami` $ZAP_INSTALL_PATH |
| curl -L https://github.com/project-chip/zap/releases/download/${ZAP_VERSION}/zap-mac.zip \ |
| --output $ZAP_INSTALL_PATH/zap-mac.zip |
| cd $ZAP_INSTALL_PATH |
| unzip zap-mac.zip zap-cli |
| rm zap-mac.zip |
| ./zap-cli --version |
| - name: Bootstrap |
| timeout-minutes: 25 |
| run: scripts/build/gn_bootstrap.sh |
| - name: Uploading bootstrap logs |
| uses: actions/upload-artifact@v3 |
| if: ${{ always() && !env.ACT }} |
| with: |
| name: bootstrap-logs |
| path: | |
| .environment/gn_out/.ninja_log |
| .environment/pigweed-venv/*.log |
| - name: Setup and Build Simulated Device |
| timeout-minutes: 20 |
| run: | |
| BUILD_TYPE=simulated |
| GN_ARGS='chip_tests_zap_config="app1" chip_project_config_include_dirs=["../../examples/placeholder/linux/apps/app1/include", "../../config/standalone"] chip_config_network_layer_ble=false' |
| CHIP_ROOT_PATH=examples/placeholder/linux |
| CHIP_ROOT_PATH="$CHIP_ROOT_PATH" BUILD_TYPE="$BUILD_TYPE" scripts/build/gn_gen.sh --args="$GN_ARGS" |
| scripts/run_in_build_env.sh "ninja -C ./out/$BUILD_TYPE" |
| - name: Setup Build, Run Build and Run Tests |
| timeout-minutes: 120 |
| # We can't enable leak checking here in LSAN_OPTIONS, because on |
| # Darwin that's only supported with a new enough clang, and we're |
| # not building with the pigweed clang here. |
| run: | |
| for BUILD_TYPE in default python_lib; do |
| case $BUILD_TYPE in |
| # We want to build various standalone example apps |
| # (similar to what examples-linux-standalone.yaml |
| # does), so use target_os="all" to get those picked |
| # up as part of the "unified" build. But then to |
| # save CI resources we want to exclude the |
| # "host clang" build, which uses the pigweed |
| # clang. |
| "default") GN_ARGS='target_os="all" is_asan=true enable_host_clang_build=false';; |
| "python_lib") GN_ARGS='enable_rtti=true enable_pylib=true';; |
| esac |
| BUILD_TYPE=$BUILD_TYPE scripts/build/gn_gen.sh --args="$GN_ARGS" --export-compile-commands |
| scripts/run_in_build_env.sh "ninja -C ./out/$BUILD_TYPE" |
| BUILD_TYPE=$BUILD_TYPE scripts/tests/gn_tests.sh |
| done |
| - name: Ensure codegen is done for sanitize |
| timeout-minutes: 45 |
| run: | |
| ./scripts/run_in_build_env.sh "./scripts/run_codegen_targets.sh out/default" |
| - name: Clang-tidy validation |
| timeout-minutes: 45 |
| run: | |
| ./scripts/run_in_build_env.sh \ |
| "./scripts/run-clang-tidy-on-compile-commands.py \ |
| --compile-database out/default/compile_commands.json \ |
| check \ |
| " |
| - name: Uploading diagnostic logs |
| uses: actions/upload-artifact@v3 |
| if: ${{ failure() && !env.ACT }} |
| with: |
| name: crash-log-darwin |
| path: ~/Library/Logs/DiagnosticReports/ |
| # - name: Perform CodeQL Analysis |
| # if: ${{ github.event_name == 'push' && github.event.ref == 'refs/heads/master' }} |
| # uses: github/codeql-action/analyze@v1 |
| # TODO Log Upload https://github.com/project-chip/connectedhomeip/issues/2227 |
| # TODO https://github.com/project-chip/connectedhomeip/issues/1512 |
| |
| build_linux_gcc_coverage: |
| name: Build on Linux (coverage) |
| timeout-minutes: 85 |
| |
| runs-on: ubuntu-latest |
| if: github.actor != 'restyled-io[bot]' |
| |
| container: |
| image: connectedhomeip/chip-build:0.6.34 |
| volumes: |
| - "/tmp/log_output:/tmp/test_logs" |
| options: --privileged --sysctl "net.ipv6.conf.all.disable_ipv6=0 |
| net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" |
| |
| steps: |
| - uses: Wandalen/wretry.action@v1.0.36 |
| name: Checkout |
| with: |
| action: actions/checkout@v3 |
| with: | |
| token: ${{ github.token }} |
| attempt_limit: 3 |
| attempt_delay: 2000 |
| - name: Checkout submodules |
| run: scripts/checkout_submodules.py --shallow --platform linux |
| - name: Bootstrap |
| timeout-minutes: 10 |
| run: scripts/build/gn_bootstrap.sh |
| - name: Uploading bootstrap logs |
| uses: actions/upload-artifact@v3 |
| if: ${{ always() && !env.ACT }} |
| with: |
| name: bootstrap-logs |
| path: | |
| .environment/gn_out/.ninja_log |
| .environment/pigweed-venv/*.log |
| - name: Run Build Coverage |
| timeout-minutes: 20 |
| run: ./scripts/build_coverage.sh |
| |