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

on:
    push:
    pull_request:
    merge_group:
    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:
    infineon:
        name: Infineon examples building

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

        container:
            image: ghcr.io/project-chip/chip-build-infineon:35
            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: infineon

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

            - name: Build PSoC6 lock-app example
              run: |
                  scripts/run_in_build_env.sh \
                    "scripts/build/build_examples.py \
                        --enable-flashbundle \
                        --target infineon-psoc6-lock \
                        build \
                        --copy-artifacts-to out/artifacts \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                      psoc6 cy8ckit_062s2_43012 lock \
                      out/artifacts/infineon-psoc6-lock/chip-psoc6-lock-example.out \
                      /tmp/bloat_reports/
            - name: Build PSoC6 all-clusters-app example
              run: |
                  scripts/run_in_build_env.sh \
                    "scripts/build/build_examples.py \
                        --enable-flashbundle \
                        --target infineon-psoc6-all-clusters \
                        build \
                        --copy-artifacts-to out/artifacts \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                      psoc6 cy8ckit_062s2_43012 all-clusters \
                      out/artifacts/infineon-psoc6-all-clusters/chip-psoc6-clusters-example.out \
                      /tmp/bloat_reports/
            - name: Build PSoC6 all-clusters-minimal-app example
              run: |
                  scripts/run_in_build_env.sh \
                    "scripts/build/build_examples.py \
                        --enable-flashbundle \
                        --target infineon-psoc6-all-clusters-minimal \
                        build \
                        --copy-artifacts-to out/artifacts \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                      psoc6 cy8ckit_062s2_43012 all-clusters-minimal \
                      out/artifacts/infineon-psoc6-all-clusters-minimal/chip-psoc6-clusters-minimal-example.out \
                      /tmp/bloat_reports/
            - name: Build PSoC6 lighting-app example
              run: |
                  scripts/run_in_build_env.sh \
                    "scripts/build/build_examples.py \
                        --enable-flashbundle \
                        --target infineon-psoc6-light \
                        build \
                        --copy-artifacts-to out/artifacts \
                    "
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                      psoc6 cy8ckit_062s2_43012 light \
                      out/artifacts/infineon-psoc6-light/chip-psoc6-lighting-example.out \
                      /tmp/bloat_reports/

            - name: Build example CYW30739 Apps
              run: |
                  ./scripts/run_in_build_env.sh \
                    "./scripts/build/build_examples.py \
                      --target cyw30739-cyw930739m2evb_01-light \
                      --target cyw30739-cyw930739m2evb_01-lock \
                      --target cyw30739-cyw930739m2evb_01-ota-requestor \
                      --target cyw30739-cyw930739m2evb_01-switch \
                      build \
                      --copy-artifacts-to out/artifacts \
                    "
            - name: Get light size stats
              run: |
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    cyw30739 cyw930739m2evb_01 light \
                    out/artifacts/cyw30739-cyw930739m2evb_01-light/chip-cyw30739-lighting-example.elf \
                    /tmp/bloat_reports/
            - name: Get lock size stats
              run: |
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    cyw30739 cyw930739m2evb_01 lock \
                    out/artifacts/cyw30739-cyw930739m2evb_01-lock/chip-cyw30739-lock-example.elf \
                    /tmp/bloat_reports/
            - name: Get ota-requestor size stats
              run: |
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    cyw30739 cyw930739m2evb_01 ota-requestor \
                    out/artifacts/cyw30739-cyw930739m2evb_01-ota-requestor/chip-cyw30739-ota-requestor-example.elf \
                    /tmp/bloat_reports/
            - name: Get switch size stats
              run: |
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    cyw30739 cyw930739m2evb_01 switch \
                    out/artifacts/cyw30739-cyw930739m2evb_01-switch/chip-cyw30739-light-switch-example.elf \
                    /tmp/bloat_reports/
            - name: Uploading Size Reports
              uses: ./.github/actions/upload-size-reports
              if: ${{ !env.ACT }}
              with:
                platform-name: Infineon