# 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:
      - uses: actions/checkout@v2
        with:
          submodules: recursive
          lfs: true
      - uses: actions/setup-python@v2
        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
        run: pre-commit run --all-files --show-diff-on-failure
      - 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@v2
        name: Upload website as artifact
        if: ${{ github.event_name == 'pull_request' }}
        with:
          name: airflow-website
          path: './dist'
      - name: Deploy website on asf-site branch
        uses: s0/git-publish-subdir-action@develop
        if: ${{ github.event_name == 'push' }}
        env:
          REPO: self
          BRANCH: asf-site
          FOLDER: dist
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - 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
      - uses: actions/upload-artifact@v2
        name: Upload sphinx_airflow_theme package as artifact
        with:
          name: airflow-sphinx-theme
          path: './sphinx_airflow_theme/dist'
      - name: Build theme demo
        working-directory: sphinx_airflow_theme
        run: |
          pip install ./dist/sphinx_airflow_theme-*.whl
          cd demo
          ./docs.sh build
      - uses: actions/upload-artifact@v2
        name: Upload sphinx_airflow_theme demo as artifact
        with:
          name: airflow-sphinx-theme-demo
          path: './sphinx_airflow_theme/demo/_build/html'
      - 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
          gh release delete v0.0.1 -y || true
          NOTES="Commit: ${GITHUB_COMMIT}
          Source: ${GITHUB_REF}"

          gh release create v0.0.1 \
            --title "Latest version" \
            --notes "${NOTES}" \
            ./dist/*
