# 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
        timeout-minutes: 5

        runs-on: ubuntu-latest
        container:
            image: connectedhomeip/chip-build-doxygen:0.7.3

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

        steps:
            - name: "Print Actor"
              run: echo ${{github.actor}}
            - name: Checkout
              uses: actions/checkout@v3.5.2
            - 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
