# Copyright (c) 2020-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 - QPG

on:
    push:
    pull_request:

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

jobs:
    qpg:
        name: QPG
        timeout-minutes: 60

        env:
            BUILD_TYPE: gn_qpg
            GH_EVENT_PR: ${{ github.event_name == 'pull_request' && github.event.number || 0 }}
            GH_EVENT_HASH: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
            GH_EVENT_PARENT: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}

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

        container:
            image: connectedhomeip/chip-build:0.5.13
            volumes:
                - "/tmp/bloat_reports:/tmp/bloat_reports"
                - "/tmp/output_binaries:/tmp/output_binaries"
        steps:
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  submodules: true
            - 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 QPG6100 Lock App
              timeout-minutes: 5
              run: |
                  scripts/examples/gn_build_example.sh examples/lock-app/qpg out/lock_app_debug qpg_target_ic=\"qpg6100\"
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    qpg qpg6100+debug lock-app \
                    out/lock_app_debug/chip-qpg6100-lock-example.out \
                    /tmp/bloat_reports/
            - name: Build example QPG6100 Lighting App
              timeout-minutes: 5
              run: |
                  scripts/examples/gn_build_example.sh examples/lighting-app/qpg out/lighting_app_debug qpg_target_ic=\"qpg6100\"
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    qpg qpg6100+debug lighting-app \
                    out/lighting_app_debug/chip-qpg6100-lighting-example.out \
                    /tmp/bloat_reports/
            - name: Build example QPG6100 persistent-storage
              timeout-minutes: 5
              run: |
                  scripts/examples/gn_build_example.sh examples/persistent-storage/qpg out/persistent-storage_app_debug \
                    qpg_target_ic=\"qpg6100\"
                  .environment/pigweed-venv/bin/python3 scripts/tools/memory/gh_sizes.py \
                    qpg qpg6100+debug persistent-storage-app \
                    out/persistent-storage_app_debug/chip-qpg6100-persistent_storage-example.out \
                    /tmp/bloat_reports/
            - name: Binary artifact suffix
              id: outsuffix
              uses: haya14busa/action-cond@v1.0.0
              if: ${{ !env.ACT }}
              with:
                  cond: ${{ github.event.pull_request.number == '' }}
                  if_true: "${{ github.sha }}"
                  if_false: "pull-${{ github.event.pull_request.number }}"
            - name: Uploading Binaries
              uses: actions/upload-artifact@v2
              if: ${{ !env.ACT }}
              with:
                  name:
                      ${{ env.BUILD_TYPE }}-example-build-${{
                      steps.outsuffix.outputs.value }}
                  path: |
                      out/lighting_app_debug/chip-qpg6100-lighting-example.out
                      out/lighting_app_debug/chip-qpg6100-lighting-example.out.map
            - name: Uploading Size Reports
              uses: actions/upload-artifact@v2
              if: ${{ !env.ACT }}
              with:
                  name: Size,QPG-Examples,${{ env.GH_EVENT_PR }},${{ env.GH_EVENT_HASH }},${{ env.GH_EVENT_PARENT }}
                  path: |
                      /tmp/bloat_reports/
