# 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.5.91

        steps:
            - uses: Wandalen/wretry.action@v1.0.15
              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@v2
              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:
            EFR32_BOARD: BRD4161A
            BUILD_DIRECTORY: out/lock_app_debug/BRD4161A

        runs-on: ubuntu-latest

        container:
            image: connectedhomeip/chip-build-efr32:0.5.91
        steps:
            - uses: Wandalen/wretry.action@v1.0.15
              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@v2
              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 $EFR32_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-$EFR32_BOARD-chip-lock-example
