# Copyright (c) 2023 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 - ASR

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_LOG_TIMESTAMPS: false

jobs:
    asr:
        name: ASR

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

        container:
            image: ghcr.io/project-chip/chip-build-asr:200
            options: --user root
            volumes:
                - "/:/runner-root-volume"

        steps:
            - name: Checkout
              uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
            - name: Checkout submodules & Bootstrap
              uses: ./.github/actions/checkout-submodules-and-bootstrap
              with:
                platform: asr
            - name: Build all-clusters-app (PR)
              if: github.event_name == 'pull_request'
              run: |
                  ./scripts/run_in_build_env.sh \
                     "./scripts/build/build_examples.py \
                        --target asr-asr582x-all-clusters \
                        build \
                     "
                  rm -rf out/
            - name: Build all ASR582X examples (master)
              if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
              shell: bash
              run: |
                  targets=(
                      asr-asr582x-all-clusters
                      asr-asr582x-all-clusters-minimal
                      asr-asr582x-lighting-ota
                      asr-asr582x-light-switch-shell
                      asr-asr582x-lock-no_logging
                      asr-asr582x-ota-requestor
                      asr-asr582x-bridge-factory
                      asr-asr582x-temperature-measurement-rotating_id
                      asr-asr582x-thermostat-rio
                      asr-asr582x-dishwasher
                      asr-asr582x-refrigerator
                  )
                  for target in "${targets[@]}"; do
                      echo "=== Building $target ==="
                      ./scripts/run_in_build_env.sh \
                         "./scripts/build/build_examples.py \
                            --target $target \
                            build \
                         "
                      rm -rf out/
                  done
            - name: Notify Slack on Failure
              if: failure()
              uses: ./.github/actions/notify-slack-failure
              with:
                slack-webhook: ${{ secrets.SWTT_SLACK_WEBHOOK }}
