# 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: ZAP

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:
    zap_templates:
        name: ZAP templates generation

        runs-on: ubuntu-20.04
        container:
            image: ghcr.io/project-chip/chip-build:47
        defaults:
            run:
                shell: sh
        if: github.actor != 'restyled-io[bot]'

        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - name: Checkout submodules & Bootstrap
              uses: ./.github/actions/checkout-submodules-and-bootstrap
              with:
                platform: linux
            # Java formatting requires a newer java to run ktfmt
            # TODO: this should be eventually inside Docker files
            - name: Update java
              run: |
                apt-get update
                DEBIAN_FRONTEND=noninteractive apt-get install -fy --fix-missing openjdk-17-jre
            # Clean out java generated files: since java codegen will generate one file per
            # structure/cluster, if clusters and structures are ever changed (for in progress work)
            # this may leave obsolete files. Ensure we always check for clean regen.
            - name: Ensure clean java
              run: rm -rf src/controller/java/generated/
            - name: Generate all
              run: ./scripts/run_in_build_env.sh scripts/tools/zap_regen_all.py
            - name: Generate script-maintained items (ERROR_CODES.md)
              run: ./scripts/run_in_build_env.sh "scripts/error_table.py > docs/ERROR_CODES.md"
            - name: Ensure git works in current working directory
              run: git config --global --add safe.directory `pwd`
            - name: Check for uncommited changes
              run: |
                  git add .
                  # Show the full diff
                  git diff-index -p HEAD --
                  # Also show just the files that are different, to make it easy
                  # to tell at a glance what might be going on.  And throw in
                  # --exit-code to make this job fail if there is a difference.
                  git diff-index --exit-code HEAD --
