[nrfconnect] Use version string with tweak #438
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
# 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: | |
branches-ignore: | |
- 'dependabot/**' | |
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:47 | |
volumes: | |
- "/:/runner-root-volume" | |
- "/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@v3 | |
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: Set up 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: Set up 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: Set up 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: Set up Build Without Logging | |
run: scripts/build/gn_gen.sh --args="chip_logging=false" | |
- name: Run Build Without Logging | |
run: scripts/run_in_build_env.sh "ninja -C ./out" | |
- name: Uploading core files | |
uses: actions/upload-artifact@v4 | |
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@v4 | |
# 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:47 | |
volumes: | |
- "/:/runner-root-volume" | |
- "/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@v3 | |
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 | |
mv scripts/tools/zap/generate.py scripts/tools/zap/generate.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: Undo code pre-generation changes (make compile time codegen work again) | |
run: | | |
rm -rf ./zzz_pregenerated | |
mv scripts/codegen.py.renamed scripts/codegen.py | |
mv scripts/tools/zap/generate.py.renamed scripts/tools/zap/generate.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@v4 | |
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@v4 | |
# 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:47 | |
volumes: | |
- "/:/runner-root-volume" | |
- "/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 chip_generate_link_map_file=false" | |
scripts/run_in_build_env.sh "ninja -C ./out" | |
scripts/tests/gn_tests.sh | |
- name: Setup test python environment | |
shell: bash | |
run: | | |
scripts/run_in_build_env.sh 'virtualenv pyenv' | |
source pyenv/bin/activate | |
pip3 install ./out/controller/python/chip_core-0.0-cp37-abi3-linux_x86_64.whl | |
pip3 install ./out/controller/python/chip_clusters-0.0-py3-none-any.whl | |
pip3 install ./out/controller/python/chip_repl-0.0-py3-none-any.whl | |
- name: Run Python tests | |
shell: bash | |
run: | | |
source pyenv/bin/activate | |
cd src/controller/python/test/unit_tests/ | |
python3 -m unittest -v | |
- name: Clean previous outputs | |
run: rm -rf out pyenv | |
- name: Run Python Setup Payload Generator Test | |
shell: bash | |
run: | | |
scripts/run_in_build_env.sh 'scripts/examples/gn_build_example.sh examples/chip-tool out/' | |
scripts/run_in_build_env.sh 'virtualenv pyenv' | |
source pyenv/bin/activate | |
pip3 install -r src/setup_payload/python/requirements.txt | |
python3 src/setup_payload/tests/run_python_setup_payload_gen_test.py out/chip-tool | |
build_linux_python_lighting_device: | |
name: Build on Linux (python lighting-app) | |
runs-on: ubuntu-latest | |
if: github.actor != 'restyled-io[bot]' | |
container: | |
image: ghcr.io/project-chip/chip-build:47 | |
volumes: | |
- "/:/runner-root-volume" | |
- "/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: | | |
scripts/build_python_device.sh --chip_detail_logging true | |
build_darwin: | |
name: Build on Darwin (clang, python_lib, simulated) | |
runs-on: macos-13 | |
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@v3 | |
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@v4 | |
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:47 | |
volumes: | |
- "/:/runner-root-volume" | |
- "/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 |