<?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

       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.
-->
<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"/>

  <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>
