# 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:
    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
        timeout-minutes: 140

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

        container:
            image: connectedhomeip/chip-build-infineon:0.6.27
            volumes:
                - "/tmp/bloat_reports:/tmp/bloat_reports"
        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 infineon

            - name: Set up environment for size reports
              if: ${{ !env.ACT }}
              env:
                  GH_CONTEXT: ${{ toJson(github) }}
              run: scripts/tools/memory/gh_sizes_environment.py "${GH_CONTEXT}"

            - 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: Build PSoC6 lock-app example
              timeout-minutes: 15
              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
              timeout-minutes: 20
              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
              timeout-minutes: 20
              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
              timeout-minutes: 15
              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
              timeout-minutes: 30
              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-no-progress-logging \
                      build \
                      --copy-artifacts-to out/artifacts \
                    "
            - name: Get light size stats
              timeout-minutes: 5
              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
              timeout-minutes: 5
              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
              timeout-minutes: 5
              run: |
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    cyw30739 cyw930739m2evb_01 ota-requestor-no-progress-logging \
                    out/artifacts/cyw30739-cyw930739m2evb_01-ota-requestor-no-progress-logging/chip-cyw30739-ota-requestor-example.elf \
                    /tmp/bloat_reports/
            - name: Uploading Size Reports
              uses: actions/upload-artifact@v3
              if: ${{ !env.ACT }}
              with:
                  name: Size,Infineon-Examples,${{ env.GH_EVENT_PR }},${{ env.GH_EVENT_HASH }},${{ env.GH_EVENT_PARENT }},${{ github.event_name }}
                  path: |
                      /tmp/bloat_reports/
