| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 |
- # 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:
- merge_group:
- workflow_dispatch:
- workflow_call:
- inputs:
- run-codeql:
- required: false
- type: boolean
-
- 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)
- runs-on: ubuntu-latest
- if: github.actor != 'restyled-io[bot]'
- container:
- image: ghcr.io/project-chip/chip-build:1
- 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"
- - name: Checkout
- uses: actions/checkout@v4
- - 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: Checkout submodules & Bootstrap
- uses: ./.github/actions/checkout-submodules-and-bootstrap
- with:
- platform: linux
- - name: Initialize CodeQL
- if: ${{ inputs.run-codeql }}
- uses: github/codeql-action/init@v2
- with:
- languages: "cpp"
- - 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
- run: scripts/run_in_build_env.sh "ninja -C ./out"
- - name: Run Tests
- 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
- 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
- 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
- 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
- - name: Perform CodeQL Analysis
- if: ${{ inputs.run-codeql }}
- uses: ./.github/actions/perform-codeql-analysis
- with:
- language: cpp
- # 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)
- runs-on: ubuntu-latest
- if: github.actor != 'restyled-io[bot]'
- container:
- image: ghcr.io/project-chip/chip-build:1
- 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"
- - name: Checkout
- uses: actions/checkout@v4
- - 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: Checkout submodules & Bootstrap
- uses: ./.github/actions/checkout-submodules-and-bootstrap
- with:
- platform: linux
- - name: Initialize CodeQL
- if: ${{ inputs.run-codeql }}
- uses: github/codeql-action/init@v2
- with:
- languages: "cpp"
- - name: Setup and Build Simulated Device
- 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
- 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: Clean output
- run: rm -rf ./out
- - name: Run Tests with sanitizers
- 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
- run: |
- ./scripts/run_in_build_env.sh "./scripts/run_codegen_targets.sh out/sanitizers"
- - name: Clang-tidy validation
- 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)/|-ReadImpl|-InvokeSubscribeImpl' \
- check \
- "
- - name: Clean output
- run: rm -rf ./out
- - name: Build using build_examples.py
- 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: Clean output
- run: rm -rf ./out
- - name: Build using build_examples.py (pregen)
- 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 out -name "CHIPClusters.h" | wc -l)
- if [ "${CNT}" != "0" ]; then
- echo "ERROR: found unexpected generated files:"
- find out -name "CHIPClusters.h"
- 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
- run: |
- ./scripts/run_in_build_env.sh \
- "./scripts/build/build_examples.py --target linux-fake-tests build"
- - name: Perform CodeQL Analysis
- if: ${{ inputs.run-codeql }}
- uses: ./.github/actions/perform-codeql-analysis
- with:
- language: cpp
-
- - 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)
- runs-on: ubuntu-latest
- if: github.actor != 'restyled-io[bot]'
- container:
- image: ghcr.io/project-chip/chip-build:1
- 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"
- - name: Checkout
- uses: actions/checkout@v4
- - name: Checkout submodules & Bootstrap
- uses: ./.github/actions/checkout-submodules-and-bootstrap
- with:
- platform: linux
- - name: Setup Build, Run Build and Run Tests
- 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
- 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
- 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)
- runs-on: macos-latest
- if: github.actor != 'restyled-io[bot]'
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Checkout submodules & Bootstrap
- uses: ./.github/actions/checkout-submodules-and-bootstrap
- with:
- platform: darwin
- - name: Try to ensure the directory for diagnostic log collection exists
- run: |
- mkdir -p ~/Library/Logs/DiagnosticReports || true
- - name: Initialize CodeQL
- if: ${{ inputs.run-codeql }}
- uses: github/codeql-action/init@v2
- with:
- languages: "cpp"
- - name: Setup and Build Simulated Device
- 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
- # 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
- run: |
- ./scripts/run_in_build_env.sh "./scripts/run_codegen_targets.sh out/default"
- - name: Clang-tidy validation
- 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: ${{ inputs.run-codeql }}
- uses: ./.github/actions/perform-codeql-analysis
- with:
- language: cpp
-
- # 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)
- runs-on: ubuntu-latest
- if: github.actor != 'restyled-io[bot]'
- container:
- image: ghcr.io/project-chip/chip-build:1
- 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: Checkout
- uses: actions/checkout@v4
- - name: Checkout submodules & Bootstrap
- uses: ./.github/actions/checkout-submodules-and-bootstrap
- with:
- platform: linux
- - name: Run Build Coverage
- run: ./scripts/build_coverage.sh
|