# 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: Build docs

on:
  push:
    branches: ['master']
  pull_request:
    branches: ['master']

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: 🗂 Checkout
        uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f  # v2.3.4
        with:
          submodules: recursive
          lfs: true
      - name: 🐍 Setup Python
        uses: actions/setup-python@41b7212b1668f5de9d65e9c82aa777e6bbedb3a8  # v2.1.4
        with:
          python-version: '3.6'
      - name: 🐳 Build Docker image
        run: ./site.sh build-image
      - name: 🟢 Install node depedencies
        run: ./site.sh install-node-deps
      - name: 🐍 Install Python depedencies
        run: pip install -r requirements.txt
      - name: 🔎 Lint
        uses: pre-commit/action@0764670bf370aab253130d534e1eda7ff497dc60  # v2.0.0
      - name: 🔧 Build site
        run: ./site.sh build-site
      - name: 🐅 Optimize artifacts
        if: ${{ github.event_name == 'pull_request' }}
        run: |
          rm -rf ./dist/docs/*
          echo "These files have been deleted to optimize the size of the artifacts." > ./dist/docs/index.html
          echo "Here was the contents of the ./docs-archive directory" >> ./dist/docs/index.html
          find ./dist/
      - uses: actions/upload-artifact@726a6dcd0199f578459862705eed35cda05af50b  # v2.2.1
        name: 🚀 Upload website as artifact
        if: ${{ github.event_name == 'pull_request' }}
        with:
          name: airflow-website
          path: './dist'
          if-no-files-found: error
          retention-days: 14
      - name: 🚀 Deploy website on asf-site branch
        uses: JamesIves/github-pages-deploy-action@132898c54c57c7cc6b80eb3a89968de8fc283505  # v3.7.1
        if: ${{ github.event_name == 'push' }}
        with:
          BRANCH: asf-site  # The branch the action should deploy to.
          FOLDER: dist  # The folder the action should deploy.
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CLEAN: true  # Automatically remove deleted files from the deploy branch
      - name: 🔧 Copy files from site to theme️
        run: ./site.sh prepare-theme
      - name: 🔧 Prepare sphinx_airflow_theme package ️
        working-directory: sphinx_airflow_theme
        run: |
          python3 -m pip install --user --upgrade setuptools wheel
          python3 setup.py sdist bdist_wheel
      - name: 🚀 Upload sphinx_airflow_theme package as artifact
        uses: actions/upload-artifact@726a6dcd0199f578459862705eed35cda05af50b  # v2.2.1
        with:
          name: airflow-sphinx-theme
          path: './sphinx_airflow_theme/dist'
          if-no-files-found: error
          retention-days: 14
      - name: 🔧 Build theme demo
        working-directory: sphinx_airflow_theme
        run: |
          pip install ./dist/sphinx_airflow_theme-*.whl
          cd demo
          ./docs.sh build
      - name: 🚀 Upload sphinx_airflow_theme demo as artifact
        uses: actions/upload-artifact@726a6dcd0199f578459862705eed35cda05af50b  # v2.2.1
        with:
          name: airflow-sphinx-theme-demo
          path: './sphinx_airflow_theme/demo/_build'
          if-no-files-found: error
          retention-days: 14
      - name: 🚀 Create releases on GitHub
        working-directory: sphinx_airflow_theme
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GITHUB_COMMIT: ${{ github.sha }}
          GITHUB_REF: ${{ github.ref }}
        if: >
          github.ref == 'refs/heads/master' && github.repository == 'apache/airflow-site' &&
          github.event_name == 'push'
        run: |
          gh auth status
          VERSION="$(python setup.py --version)"
          TITLE=$(date "+%Y-%m-%d %H:%M:%S")
          NOTES="Commit: ${GITHUB_COMMIT}
          Source: ${GITHUB_REF}"

          gh release delete "${VERSION}" -y || true
          gh release create "${VERSION}" \
            --title "${TITLE}" \
            --notes "${NOTES}" \
            ./dist/*
