#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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: "Python Docs"
on:
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
  docs:
    runs-on: ubuntu-22.04

    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python }}
      - name: Install
        working-directory: ./mkdocs
        run: pip install -r requirements.txt
      - name: Build
        working-directory: ./mkdocs
        run: mkdocs build --strict
      - name: Copy
        working-directory: ./mkdocs
        run: mv ./site /tmp/site
      - name: Push changes to gh-pages branch
        run: |
          git checkout --orphan gh-pages-tmp
          git rm --quiet -rf .
          cp -r /tmp/site/* .
          git config --global user.name 'GitHub Actions'
          git config --global user.email 'actions@github.com'
          echo "py.iceberg.apache.org" > CNAME
          git add --all
          git commit -m 'Publish Python docs'
          git push -f origin gh-pages-tmp:gh-pages || true
