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

on:
  workflow_dispatch:
    inputs:
      RELEASE:
        description: Beam version of current release (e.g. 2.XX.0)
        required: true
        default: '2.XX.0'
      SNAPSHOT_URL:
        description: Location of the staged artifacts in Maven central (https://repository.apache.org/content/repositories/orgapachebeam-NNNN/).
        required: true
  schedule:
    - cron: '15 16 * * *'

#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 }}
    GRADLE_ENTERPRISE_CACHE_USERNAME: ${{ secrets.GE_CACHE_USERNAME }}
    GRADLE_ENTERPRISE_CACHE_PASSWORD: ${{ secrets.GE_CACHE_PASSWORD }}

jobs:
  beam_PostRelease_NightlySnapshot:
    name: beam_PostRelease_NightlySnapshot
    runs-on: [self-hosted, ubuntu-24.04, highmem]
    steps:
      - uses: actions/checkout@v7
      - name: Setup environment
        uses: ./.github/actions/setup-environment-action
        with:
          java-version: default
      - name: Setup temp local maven
        id: setup_local_maven
        run: echo "NEW_TEMP_DIR=$(mktemp -d)" >> $GITHUB_OUTPUT
      - name: run PostRelease validation script
        uses: ./.github/actions/gradle-command-self-hosted-action
        with:
          gradle-command: :release:runJavaExamplesValidationTask
          arguments: |
            -Pver='${{ github.event.inputs.RELEASE }}' \
            -Prepourl='${{ github.event.inputs.SNAPSHOT_URL }}' \
            -PmavenLocalPath='${{ steps.setup_local_maven.outputs.NEW_TEMP_DIR }}'
      - name: Clean up local maven
        if: steps.setup_local_maven.outcome == 'success'
        run: rm -rf '${{ steps.setup_local_maven.outputs.NEW_TEMP_DIR }}'
