# Copyright (c) 2020 Linaro Limited.
# SPDX-License-Identifier: Apache-2.0

name: Doc build for Release or Daily

# Either a daily based on schedule/cron or only on tag push
on:
  schedule:
    - cron:  '50 22 * * *'
  push:
    tags:
    - '*'

jobs:
  doc-publish:
    name: Publish Documentation
    runs-on: ubuntu-latest
    if: github.repository == 'zephyrproject-rtos/zephyr'

    steps:
    - name: Update PATH for west
      run: |
        echo "$HOME/.local/bin" >> $GITHUB_PATH

    - name: Determine tag
      id: tag
      run: |
        # We expect to get here either due to a schedule event in which
        # case we are doing a daily build of the docs, or because a new
        # tag was pushed, in which case we are building docs for a release
        if [ ${GITHUB_EVENT_NAME} == "schedule" ]; then
           echo ::set-output name=TYPE::daily;
           echo ::set-output name=RELEASE::latest;
        elif [ ${GITHUB_EVENT_NAME} == "push" ]; then
           # If push due to a tag GITHUB_REF will look like refs/tags/TAG-FOO
           # chop of 'refs/tags' so RELEASE=TAG-FOO
           echo ::set-output name=TYPE::release;
           echo ::set-output name=RELEASE::${GITHUB_REF/refs\/tags\//};
        else
           exit 1
        fi

    - name: Configure AWS Credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: us-east-1

    - name: checkout
      uses: actions/checkout@v2

    - name: install-pkgs
      run: |
        sudo apt-get install -y ninja-build doxygen

    - name: cache-pip
      uses: actions/cache@v1
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-doc-pip

    - name: install-pip
      run: |
        pip3 install setuptools
        pip3 install -r scripts/requirements-base.txt
        pip3 install -r scripts/requirements-doc.txt

    - name: west setup
      run: |
        west init -l . || true

    - name: build-docs
      env:
        DOC_TAG: ${{ steps.tag.outputs.TYPE }}
      run: |
        source zephyr-env.sh
        make DOC_TAG=${DOC_TAG} htmldocs

    - name: check-warns
      run: |
        if [ -s doc/_build/doc.warnings ]; then
           docwarn=$(cat doc/_build/doc.warnings)
           docwarn="${docwarn//'%'/'%25'}"
           docwarn="${docwarn//$'\n'/'%0A'}"
           docwarn="${docwarn//$'\r'/'%0D'}"
           # We treat doc warnings as errors
           echo "::error file=doc.warnings::$docwarn"
           exit 1
        fi

    - name: Upload to AWS S3
      env:
        RELEASE: ${{ steps.tag.outputs.RELEASE }}
      run: |
        echo "DOC_RELEASE=[$RELEASE]"
        if [ "$RELEASE" == "latest" ]; then
           export
           echo "publish latest docs"
           aws s3 sync  --quiet doc/_build/html s3://docs.zephyrproject.org/latest --delete
           echo "success sync of latest docs"
        else
           DOC_RELEASE=${RELEASE}.0
           echo "publish release docs: ${DOC_RELEASE}"
           aws s3 sync  --quiet doc/_build/html s3://docs.zephyrproject.org/${DOC_RELEASE}
           echo "success sync of rel docs"
        fi
        if [ -d doc/_build/doxygen/html ]; then
           echo "publish doxygen"
           aws s3 sync  --quiet doc/_build/doxygen/html s3://docs.zephyrproject.org/apidoc/${RELEASE} --delete
           echo "success publish of doxygen"
        fi
