# Copyright (c) 2020 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: Build example - Linux ARM

on:
    push:
        branches:
            - master
            - 'v*-branch'
    pull_request:
    merge_group:

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:
    arm_crosscompile:
        name: Linux ARM Cross compile

        runs-on: ubuntu-latest
        if: github.actor != 'restyled-io[bot]'

        container:
            image: ghcr.io/project-chip/chip-build-crosscompile:90
            volumes:
                - "/tmp/bloat_reports:/tmp/bloat_reports"

        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - name: Checkout submodules & Bootstrap
              uses: ./.github/actions/checkout-submodules-and-bootstrap
              with:
                platform: linux

            - name: Set up environment for size reports
              uses: ./.github/actions/setup-size-reports
              if: ${{ !env.ACT }}
              with:
                gh-context: ${{ toJson(github) }}

            - name: Build Some samples
              run: |
                  ./scripts/run_in_build_env.sh \
                     "./scripts/build/build_examples.py \
                        --target linux-arm64-chip-cert-clang \
                        --target linux-arm64-all-clusters-clang \
                        --target linux-arm64-chip-tool-ipv6only-clang \
                        --target linux-arm64-chip-tool-nodeps-ipv6only \
                        --target linux-arm64-lock-clang \
                        --target linux-arm64-minmdns-clang \
                        --target linux-arm64-light-rpc-ipv6only-clang \
                        --target linux-arm64-thermostat-no-ble-clang \
                        --target linux-arm64-lit-icd-no-ble-clang \
                        --target linux-arm64-fabric-admin-clang-rpc \
                        --target linux-arm64-fabric-bridge-no-ble-clang-rpc \
                        --target linux-arm64-fabric-sync-no-ble-clang \
                        build \
                     "
            - name: Bloat report - chip-tool
              run: |
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    linux arm64 chip-tool-ipv6only \
                    out/linux-arm64-chip-tool-ipv6only-clang/chip-tool \
                    /tmp/bloat_reports/
            - name: Bloat report - thermostat
              run: |
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    linux arm64 thermostat-no-ble \
                    out/linux-arm64-thermostat-no-ble-clang/thermostat-app \
                    /tmp/bloat_reports/
            - name: Uploading Size Reports
              uses: ./.github/actions/upload-size-reports
              if: ${{ !env.ACT }}
              with:
                platform-name: Linux
