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

on:
    push:
        paths:
            - "**.do[xc]"
            - "**.c[cs]?"
            - "**.cxx"
            - "**.cpp"
            - "**.c\\+\\+"
            - "**.ii"
            - "**.ixx"
            - "**.ipp"
            - "**.i\\+\\+"
            - "**.inl"
            - "**.[hH]"
            - "**.hh"
            - "**.HH"
            - "**.hxx"
            - "**.hpp"
            - "**.h\\+\\+"
            - "**.mm"
            - "**.txt"
            - "**.[ido]dl"
            - "**.java"
            - "**.d"
            - "**.php[45]?"
            - "**.inc"
            - "**.phtml"
            - "**.[mM]"
    pull_request:
        paths:
            - "**.do[xc]"
            - "**.c[cs]?"
            - "**.cxx"
            - "**.cpp"
            - "**.c\\+\\+"
            - "**.ii"
            - "**.ixx"
            - "**.ipp"
            - "**.i\\+\\+"
            - "**.inl"
            - "**.[hH]"
            - "**.hh"
            - "**.HH"
            - "**.hxx"
            - "**.hpp"
            - "**.h\\+\\+"
            - "**.mm"
            - "**.txt"
            - "**.[ido]dl"
            - "**.java"
            - "**.d"
            - "**.php[45]?"
            - "**.inc"
            - "**.phtml"
            - "**.[mM]"
    workflow_dispatch:

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:
    doxygen:
        name: Build Doxygen

        runs-on: ubuntu-latest
        container:
            image: ghcr.io/project-chip/chip-build-doxygen:26

        if: github.actor != 'restyled-io[bot]'

        steps:
            - name: "Print Actor"
              run: echo ${{github.actor}}
            - name: Checkout
              uses: actions/checkout@v4
            - name: Generate
              run: scripts/helpers/doxygen.sh
            - name: Extract branch name
              shell: bash
              run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF##*/})"
              id: extract_branch
            - name: Deploy if master
              if: steps.extract_branch.outputs.branch == 'master' && github.repository == 'project-chip/connectedhomeip'
              uses: peaceiris/actions-gh-pages@v3
              with:
                  deploy_key: ${{ secrets.DOXYGEN_DEPLOY_KEY }}
                  external_repository: project-chip/connectedhomeip-doc
                  publish_dir: ./docs/html
                  # Keep only the latest version of the documentation
                  force_orphan: true
