/* 
 * 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.
 */
 
'use strict';

var gulp = require('gulp'),
    maven = require('maven-deploy'),
    config = require('../maven-config.json'),
    runSequence = require('run-sequence');

//install on local maven repo
gulp.task('install', ['build'], function() {
    maven.config(config);
    return maven.install();
});

//Snapshot release to Apache, used by CI server
gulp.task('snapshot', ['build'], function() {
    maven.config(config);
    return maven.deploy('apache-snapshot-repo',true);
});

//Actual release to Apache repo
gulp.task('release', ['build'], function() {
    maven.config(config);
    return maven.deploy('apache-release-repo');
});