# 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: Release Nightly Snapshot

on:
  schedule:
    - cron: '15 12 * * *'
  workflow_dispatch:

#Setting explicit permissions for the action to avoid the default permissions which are `write-all` in case of pull_request_target event
permissions:
  actions: write
  pull-requests: read
  checks: read
  contents: read
  deployments: read
  id-token: none
  issues: read
  discussions: read
  packages: read
  pages: read
  repository-projects: read
  security-events: read
  statuses: read

env:
    DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}

jobs:
  beam_Release_NightlySnapshot:
    name: ${{ matrix.job_name }} (${{ matrix.job_phrase }})
    runs-on: [self-hosted, ubuntu-20.04, main]
    strategy:
      matrix:
        job_name: [beam_Release_NightlySnapshot]
        job_phrase: [Release Nightly Snapshot]
    if: |
      github.event_name == 'workflow_dispatch' ||
      (github.event_name == 'schedule' && github.repository == 'apache/beam')
    steps:
      - uses: actions/checkout@v4
      - name: Setup repository
        uses: ./.github/actions/setup-action
        with:
          github_job: ${{ matrix.job_name }} (${{ matrix.job_phrase }})
          github_token: ${{ secrets.GITHUB_TOKEN }}
          comment_phrase: ${{ matrix.job_phrase }}
      - name: Setup environment
        uses: ./.github/actions/setup-environment-action
        with:
          java-version: |
            21
            11
          disable-cache: true
      - name: Auth on snapshot repository
        run: |
          mkdir -p ${HOME}/.m2
          echo "<settings>
            <servers>
              <server>
                <id>apache.snapshots.https</id>
                <username>${{ secrets.NEXUS_USER }}</username>
                <password>${{ secrets.NEXUS_PW }}</password>
              </server>
            </servers>
          </settings>" > ${HOME}/.m2/settings.xml
      - name: run Publish script
        run: |
          ./gradlew publish --max-workers=8 -Ppublishing -PskipCheckerFramework \
          -Pjava21Home=$JAVA_HOME_21_X64 \
          --continue -Dorg.gradle.jvmargs=-Xms2g -Dorg.gradle.jvmargs=-Xmx6g \
          -Dorg.gradle.vfs.watch=false -Pdocker-pull-licenses \
          -Dorg.gradle.internal.http.connectionTimeout=60000 \
          -Dorg.gradle.internal.http.socketTimeout=120000
