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

require 'rake'
require 'rubygems/package_task'
require 'fileutils'
require 'pp'

SUBDIRS = ["client", "server"]

desc "Package client and server"
task :package do
  SUBDIRS.each do |dir|
    Dir.chdir(dir) { system("rake package") }
  end
end

desc "Prepare a release"
task :release => [ :package ] do
  specs = {
    :client => Gem::Specification.load('client/deltacloud-client.gemspec'),
    :server => Gem::Specification.load('server/deltacloud-core.gemspec')
  }
  versions = specs.keys.inject({}) { |h, k| h[k] = specs[k].version.to_s; h }
  files = ["client/pkg/deltacloud-client-#{versions[:client]}.tgz",
           "client/pkg/deltacloud-client-#{versions[:client]}.gem",
           "server/pkg/deltacloud-core-#{versions[:server]}.tgz",
           "server/pkg/deltacloud-core-#{versions[:server]}.gem" ]
  FileUtils.mkdir_p("release")
  files.each do |src|
    base = File::basename(src)
    dst = File::join("release", base)
    FileUtils.cp(src, dst)
    cmd = <<EOS
gpg -q --batch --verify #{dst}.asc > /dev/null 2>&1 || \
  gpg --output #{dst}.asc --armour --detach-sig #{dst}
EOS
    system(cmd)
    Dir::chdir("release") do
      system("md5sum #{base} > #{base}.md5")
      system("sha1sum #{base} > #{base}.sha1")
    end
  end
end

desc "Remove the release directory"
task :clobber do
  FileUtils.rm_rf("release")
end
