# 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:
      # only publish v* tags, do not care about zephyr-v* which point to the
      # same commit
      - 'v*'

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
           # we want just the version, without the leading 'v'
           DOC_RELEASE=${RELEASE:1}
           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
           API_RELEASE=${RELEASE:1}
           echo "publish doxygen to apidoc/${API_RELEASE}"
           aws s3 sync  --quiet doc/_build/doxygen/html s3://docs.zephyrproject.org/apidoc/${API_RELEASE} --delete
           echo "success publish of doxygen"
        fi
