# 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 Chef CI examples on all platforms

on:
    push:
        branches-ignore:
            - 'dependabot/**'
    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:
    chef_linux:
        name: Chef - Linux CI Examples
        runs-on: ubuntu-latest
        if: github.actor != 'restyled-io[bot]'

        container:
            image: ghcr.io/project-chip/chip-build:74
            options: --user root

        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - name: Checkout submodules & Bootstrap
              uses: ./.github/actions/checkout-submodules-and-bootstrap
              with:
                platform: linux
            - name: CI Examples Linux
              shell: bash
              run: |
                  ./scripts/run_in_build_env.sh "./examples/chef/chef.py --ci -t linux"

    chef_esp32:
        name: Chef - ESP32 CI Examples
        runs-on: ubuntu-latest
        if: github.actor != 'restyled-io[bot]'

        container:
            image: ghcr.io/project-chip/chip-build-esp32:74
            options: --user root

        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - name: Checkout submodules
              uses: ./.github/actions/checkout-submodules-and-bootstrap
              with:
                platform: esp32
            - name: CI Examples ESP32
              shell: bash
              run: |
                  ./scripts/run_in_build_env.sh "./examples/chef/chef.py --ci -t esp32"

    chef_nrfconnect:
        name: Chef - NRFConnect CI Examples
        runs-on: ubuntu-latest
        if: github.actor != 'restyled-io[bot]'

        container:
            image: ghcr.io/project-chip/chip-build-nrf-platform:74
            options: --user root

        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - name: Checkout submodules & Bootstrap
              uses: ./.github/actions/checkout-submodules-and-bootstrap
              with:
                platform: nrfconnect
            - name: CI Examples NRFConnect
              shell: bash
              run: |
                  ./scripts/run_in_build_env.sh "./examples/chef/chef.py --ci -t nrfconnect"

    chef_telink:
        name: Chef - Telink CI Examples
        runs-on: ubuntu-latest
        if: github.actor != 'restyled-io[bot]'

        container:
            image: ghcr.io/project-chip/chip-build-telink:74
            options: --user root

        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - name: Checkout submodules & Bootstrap
              uses: ./.github/actions/checkout-submodules-and-bootstrap
              with:
                platform: telink
            # - name: Update Zephyr to specific revision (for developers purpose)
            #   shell: bash
            #   run: scripts/run_in_build_env.sh "python3 scripts/tools/telink/update_zephyr.py ab81a585fca6a83b30e1f4e58a021113d6a3acb8"
            - name: CI Examples Telink
              shell: bash
              run: |
                  ./scripts/run_in_build_env.sh "./examples/chef/chef.py --ci -t telink"
