# 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:
  build:
    runs-on: ubuntu-latest

    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-doc.txt
        pip3 install west>=0.6.2
        pip3 install pyelftools

    - 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
