# 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 release artifacts

on:
    workflow_dispatch:
        inputs:
            releaseTag:
                description: Release Tag
                required: true

jobs:
    esp32:
        name: ESP32
        env:
            BUILD_DIRECTORY: examples/all-clusters-app/esp32/build
        runs-on: ubuntu-latest

        container:
            image: connectedhomeip/chip-build-esp32:0.6.06

        steps:
            - uses: Wandalen/wretry.action@v1.0.36
              name: Checkout
              with:
                  action: actions/checkout@v3
                  with: |
                      submodules: true
                      token: ${{ github.token }}
                  attempt_limit: 3
                  attempt_delay: 2000
                  ref: "${{ github.event.inputs.releaseTag }}"
            - 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
              run: scripts/examples/esp_example.sh all-clusters-app

            - name: Upload artifact
              run: |
                  scripts/helpers/upload_release_asset.py                  \
                     --github-repository project-chip/connectedhomeip      \
                     --github-api-token "${{ secrets.GITHUB_TOKEN }}"      \
                     --release-tag "${{ github.event.inputs.releaseTag }}" \
                     --bundle-files $BUILD_DIRECTORY/chip-all-clusters-app.flashbundle.txt \
                     --working-directory $BUILD_DIRECTORY                  \
                     --bundle-name esp32-chip-all-clusters-app

    efr32:
        name: EFR32
        env:
            SILABS_BOARD: BRD4161A
            BUILD_DIRECTORY: out/lock_app_debug/BRD4161A

        runs-on: ubuntu-latest

        container:
            image: connectedhomeip/chip-build-efr32:0.6.06
        steps:
            - uses: Wandalen/wretry.action@v1.0.36
              name: Checkout
              with:
                  action: actions/checkout@v3
                  with: |
                      submodules: true
                      token: ${{ github.token }}
                  attempt_limit: 3
                  attempt_delay: 2000
                  ref: "${{ github.event.inputs.releaseTag }}"
            - 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 example EFR32 Lock App
              run: scripts/examples/gn_efr32_example.sh examples/lock-app/efr32/
                  out/lock_app_debug $SILABS_BOARD

            - name: Upload artifact
              run: |
                  scripts/helpers/upload_release_asset.py                     \
                     --github-repository project-chip/connectedhomeip         \
                     --github-api-token "${{ secrets.GITHUB_TOKEN }}"         \
                     --release-tag "${{ github.event.inputs.releaseTag }}"    \
                     --bundle-files $BUILD_DIRECTORY/lock_app.flashbundle.txt \
                     --working-directory $BUILD_DIRECTORY                     \
                     --bundle-name efr32-$SILABS_BOARD-chip-lock-example
