#
# 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: build

on:
  push:
    branches:
      - "2.x"
      - "2.25.x"
      - "release/2*"
  pull_request:
    types:
      # Standard types
      - opened
      - synchronize
      - reopened
      # Used in Dependabot PRs to retrigger required workflows
      - ready_for_review

# Cancel in-progress runs when a newer commit lands on the same PR; pushes to 2.x run to completion.
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

permissions: read-all

jobs:

  build:
    uses: apache/logging-parent/.github/workflows/build-reusable.yaml@gha/v0
    with:
      java-version: |
        8
        17
      site-enabled: true
      reproducibility-check-enabled: false

  deploy-snapshot:
    needs: build
    if: github.repository == 'apache/logging-log4j2' && github.ref_name == '2.x'
    uses: apache/logging-parent/.github/workflows/deploy-snapshot-reusable.yaml@gha/v0
    # Secrets for deployments
    secrets:
      NEXUS_USERNAME: ${{ secrets.NEXUS_USER }}
      NEXUS_PASSWORD: ${{ secrets.NEXUS_PW }}
    with:
      java-version: |
        8
        17

  deploy-release:
    needs: build
    if: github.repository == 'apache/logging-log4j2' && startsWith(github.ref_name, 'release/')
    uses: apache/logging-parent/.github/workflows/deploy-release-reusable.yaml@gha/v0
    # Secrets for deployments
    secrets:
      GPG_SECRET_KEY: ${{ secrets.LOGGING_GPG_SECRET_KEY }}
      NEXUS_USERNAME: ${{ secrets.LOGGING_STAGE_DEPLOYER_USER }}
      NEXUS_PASSWORD: ${{ secrets.LOGGING_STAGE_DEPLOYER_PW }}
      SVN_USERNAME: ${{ secrets.LOGGING_SVN_DEV_USERNAME }}
      SVN_PASSWORD: ${{ secrets.LOGGING_SVN_DEV_PASSWORD }}
    # Write permissions to allow the Maven `revision` property update, changelog release, etc.
    permissions:
      contents: write
    with:
      java-version: |
        8
        17
      project-id: log4j

  verify-reproducibility-snapshot:
    needs: deploy-snapshot
    uses: apache/logging-parent/.github/workflows/verify-reproducibility-reusable.yaml@gha/v0
    with:
      # Name of the artifact uploaded by `deploy-snapshot`
      reference-artifact-name: ${{ needs.deploy-snapshot.outputs.repository-artifact-name }}
      # Encode the `runs-on` input as JSON array
      runs-on: '["ubuntu-latest", "macos-latest"]'

  verify-reproducibility-release:
    needs: deploy-release
    uses: apache/logging-parent/.github/workflows/verify-reproducibility-reusable.yaml@gha/v0
    with:
      # URL of staging repository
      nexus-url: ${{ needs.deploy-release.outputs.nexus-url }}
      # Encode the `runs-on` input as JSON array
      runs-on: '["ubuntu-latest", "macos-latest"]'

  # Run integration-tests automatically after a snapshot is published
  integration-test-snapshot:
    needs: deploy-snapshot
    uses: apache/logging-log4j-samples/.github/workflows/integration-test.yaml@main
    with:
      log4j-version: ${{ needs.deploy-snapshot.outputs.project-version }}
      # Use the `main` branch of `logging-log4j-samples`
      samples-ref: 'refs/heads/main'

  # Run integration-tests automatically after an RC is published
  integration-test-release:
    needs: deploy-release
    uses: apache/logging-log4j-samples/.github/workflows/integration-test.yaml@main
    with:
      log4j-version: ${{ needs.deploy-release.outputs.project-version }}
      # URL of the staging repository
      log4j-repository-url: ${{ needs.deploy-release.outputs.nexus-url }}
      # Use the `main` branch of `logging-log4j-samples`
      samples-ref: 'refs/heads/main'
