#
# 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: CI - Pulsar Website build
on:
  schedule:
    - cron: '0 */6 * * *'

env:
  MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3

jobs:
  build-website:
    if: ${{ github.repository == 'apache/pulsar' }}
    name: Build and publish pulsar website
    runs-on: ubuntu-latest
    timeout-minutes: 120
    steps:
      - name: checkout
        uses: actions/checkout@v2

      - name: Tune Runner VM
        uses: ./.github/actions/tune-runner-vm

      - name: Cache local Maven repository
        uses: actions/cache@v2
        with:
          path: |
            ~/.m2/repository/*/*/*
            !~/.m2/repository/org/apache/pulsar
          key: ${{ runner.os }}-m2-dependencies-website-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-m2-dependencies-all-${{ hashFiles('**/pom.xml') }}
            ${{ runner.os }}-m2-dependencies-core-modules-${{ hashFiles('**/pom.xml') }}
            ${{ runner.os }}-m2-dependencies-core-modules-

      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          distribution: 'temurin'
          java-version: 11

      - name: clean disk
        run: |
          sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
          sudo apt clean
          docker rmi $(docker images -q) -f
          df -h

      - name: run install by skip tests
        run: mvn -q -B -ntp clean install -DskipTests -DskipSourceReleaseAssembly=true -Dspotbugs.skip=true -Dlicense.skip=true

      - name: generate swagger json file
        run: mvn -B -ntp -pl pulsar-broker install -DskipTests -Pswagger

      - name: publish
        env:
          GH_TOKEN: ${{ secrets.PULSARBOT_TOKEN }}
          CROWDIN_DOCUSAURUS_API_KEY: ${{ secrets.PULSAR_CROWDIN_DOCUSAURUS_API_KEY }}
        run: |
          export CROWDIN_DOCUSAURUS_PROJECT_ID=apache-pulsar
          echo "Copying swagger json file ..."
          mkdir -p site2/website/static/swagger/master/
          cp pulsar-broker/target/docs/swagger*.json site2/website/static/swagger/master
          echo "Copied swagger json file."
          echo "Building Website"
          # Build the new website
          site2/tools/docker-build-site.sh
          # Script was initially made for travis
          bash -e site2/tools/publish-website.sh
