# 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.

# Based on Apache Arrow's java-nightly workflow
# https://github.com/apache/arrow/blob/master/.github/workflows/java_nightly.yml
name: Publish nightly snapshots and documentation

on:
  workflow_dispatch:
  schedule:
    - cron: "0 0 * * *"

permissions:
  contents: read

jobs:
  publish-nightly:
    name: Publish nightly
    runs-on: ubuntu-22.04
    if: github.repository == 'apache/pekko'
    env:
      DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
    steps:
      - name: Checkout
        uses: actions/checkout@v5
        with:
          fetch-depth: 0
          fetch-tags: true

      - name: Setup Java 17
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: 17

      - name: Install sbt
        uses: sbt/setup-sbt@17575ea4e18dd928fe5968dbe32294b97923d65b # v1.1.13

      - name: Cache Coursier cache
        uses: coursier/cache-action@4e2615869d13561d626ed48655e1a39e5b192b3c # v6.4.7

      - name: Install Graphviz
        run: |-
          sudo apt-get install graphviz

      - name: Report MIMA incompatibility issues
        run: |-
          sbt +mimaReportBinaryIssues

      - name: Publish to Apache Maven repo
        env:
          NEXUS_USER: ${{ secrets.NEXUS_USER }}
          NEXUS_PW: ${{ secrets.NEXUS_PW }}
        run: sbt -Dsbt.repository.publish.attempts=10 +publish

      - name: Build Documentation
        run: |-
          sbt -Dpekko.genjavadoc.enabled=true -Dpekko.genlicensereport.enabled=true docs/paradox unidoc

      # Create directory structure upfront since rsync does not create intermediate directories otherwise
      - name: Create nightly directory structure
        run: |-
          mkdir -p target/nightly-docs/docs/pekko/${{ github.ref_name }}-snapshot/
          mv docs/target/paradox/site/main/ target/nightly-docs/docs/pekko/${{ github.ref_name }}-snapshot/docs
          mv target/scala-2.13/unidoc target/nightly-docs/docs/pekko/${{ github.ref_name }}-snapshot/api
          mv target/javaunidoc target/nightly-docs/docs/pekko/${{ github.ref_name }}-snapshot/japi

      - name: Upload nightly docs
        uses: ./.github/actions/sync-nightlies
        with:
          upload: true
          switches: --archive --compress --update --delete --progress --relative
          local_path: target/nightly-docs/./docs/pekko/${{ github.ref_name }}-snapshot # The intermediate dot is to show `--relative` which paths to operate on
          remote_path: ${{ secrets.NIGHTLIES_RSYNC_PATH }}/pekko
          remote_host: ${{ secrets.NIGHTLIES_RSYNC_HOST }}
          remote_port: ${{ secrets.NIGHTLIES_RSYNC_PORT }}
          remote_user: ${{ secrets.NIGHTLIES_RSYNC_USER }}
          remote_key: ${{ secrets.NIGHTLIES_RSYNC_KEY }}
