#
# 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: Publish snapshot artifacts

on:
  push:
    branches:
      - master

jobs:
  publish:
    name: Publish snapshot artifacts
    runs-on: ubuntu-latest
    if: github.repository == 'apache/drill'
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Cache Maven Repository
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-
      - name: Deploy Maven snapshots
        env:
          ASF_USERNAME: ${{ secrets.NEXUS_USER }}
          ASF_PASSWORD: ${{ secrets.NEXUS_PW }}
        run: |
          echo "<settings><servers><server><id>apache.snapshots.https</id><username>$ASF_USERNAME</username><password>$ASF_PASSWORD</password></server></servers></settings>" > settings.xml
          mvn --settings settings.xml -U -B -e -fae -ntp -DskipTests deploy
