<?xml version="1.0"?>
<!--
   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

       https://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.
-->
<project name="upload" xmlns:ivy="antlib:org.apache.ivy.ant">
  <description>Targets for uploading releases to ASF's Nexus
  instance</description>

  <!-- where to upload the artifacts -->
  <property name="upload.url"
            value="https://repository.apache.org/service/local/staging/deploy/maven2"/>
  <property name="ivy.distrib.dir" value="${dist.base}"/>

  <target name="perform-nexus-upload"
          description="really requires the prepare-upload target to be run first">
    <fail unless="upload.user"
          message="supply upload.user on the command line"/>
    <fail unless="upload.password"
          message="supply upload.password on the command line"/>
    <ivy:configure file="${common.basedir}/ivysettings-nexus.xml"
                   settingsId="upload"/>
    <ivy:resolve file="${target.ivy.xml}" settingsRef="upload"/>
    <ivy:retrieve settingsRef="upload"/>
    <ivy:deliver settingsRef="upload"/>
    <ivy:publish publishivy="false"
                 artifactspattern="${build.javarepository}/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"
                 resolver="nexus"
                 settingsRef="upload"/>
  </target>
</project>
