# 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:
        branches:
            - master
            - 'v*-branch'   
        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:81

        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
