#!/usr/bin/perl
# Autobuilder for cPsupport
# By: bvierra
use Getopt::Std;

my ($ret, $release, $live, $pwd, $test, %opts, $revision);

getopts('lrth:', \%opts);

$live = $opts{'l'};
$release = $opts{'r'};
$test = $opts{'t'};
my $help = $opts{'h'};
if ($help || (!$live && !$release && !$test)) {
    print "cPsupport Autobuilder [-l -r -t -h]\n";
    print "-l = Live Upload - Will update demo at http://cpsupport.cpanel.net\n";
    print "-r = Release Build - Will upload to http://cpsupport.cpanel.net/releases\n";
    print "-t = Test Build - Will upload a test build to http://cpsupport.cpanel.net/releases/cPsupport-PREBUILD.tar.gz\n";
    exit;
}

if ($opts{'r'} || $opts{'t'}) {
    print "Please use the official release method on flux now\n";
    exit;
}

chomp($pwd = `pwd`);

if ($live) {
    print "Uploading changes to cpsupport.cpanel.net\n";
} else {
    print "\n";
}

#print "Creating and copying files to builddir...";
#
#if (-e "cPsBuild") {
#    system("rm -rf cPsBuild");
#}
#
#mkdir("cPsBuild");
#system("rsync * -a --exclude=\".svn\" --exclude=\"autobuild.pl\" --exclude=\"cPsBuild\" --exclude=\"index.html\" cPsBuild/ > /dev/null 2>&1");
#print "Done\n";

if ($live) {
    print "Copying web files to cpsupport.cpanel.net...";
    chdir("$pwd/pkg");
    system("rsync * --exclude=\".svn\" --exclude=\"autobuild.pl\" --exclude=\"cPsBuild\" -ae ssh root\@cpsupport.cpanel.net:/home/cps/public_html/cPSupport");
    system("ssh root\@cpsupport.cpanel.net 'chown -R cps:cps /home/cps/public_html/cPSupport'");
    system("ssh root\@cpsupport.cpanel.net 'chmod -R 0755 /home/cps/public_html/cPSupport/*'");
    print "Done\n";
}

#print "Creating pkg.tar.gz archive...";
#chdir("$pwd/cPsBuild/cPSupport");
#system("tar -C $pwd/cPsBuild/cPSupport/ -zcf $pwd/cPsBuild/cPSupport/pkg.tar.gz pkg/");
#system("rm -rf $pwd/cPsBuild/cPSupport/pkg/");
#print "Done\n";

#if ($live) {
#    print "Copying backend files to cpsupport.cpanel.net...";
#    chdir("$pwd/cPsBuild");
#    system("rsync cpsupport -ae ssh root\@cpsupport.cpanel.net:/usr/local/cpanel/");
#    system("ssh root\@cpsupport.cpanel.net 'chown -R cps:cps /home/cps/public_html/demo'");
#    print "Done\n";
#}

#if ($test) {
#    print "Creating and uploading prebuild package...";
#    chdir("$pwd");
#    system("tar -zcf cPsupport-PREBUILD.tar.gz cPsBuild/");
#    system("rsync cPsupport-PREBUILD.tar.gz -ae ssh root\@cpsupport.cpanel.net:/home/cps/public_html/releases/ > /dev/null 2>&1");
#    print "Done\n";
#    $ret .= "PreBuild transfered to release server\n";
#    $ret .= "http://cpsupport.cpanel.net/releases/cPsupport-PREBUILD.tar.gz\n";
#}

#if ($release) {
#    print "Creating and uploading release package...";
#    chdir("$pwd");
#    $revision = `svn info`;
#    if ($revision =~ /^Revision:\s(\d+)$/m) {
#        $revision = $1;
#    }
#    else {
#        die "\nCannot find revision # for release\n";
#    }
#    system("tar -zcf cPsupport-$revision.tar.gz cPsBuild/");
#    system("ln -s cPsupport-$revision.tar.gz cPsupport.tar.gz");
#    system("rsync cPsupport-$revision.tar.gz -ae ssh root\@cpsupport.cpanel.net:/home/cps/public_html/releases/ > /dev/null 2>&1");
#    system("rsync cPsupport.tar.gz -ae ssh root\@cpsupport.cpanel.net:/home/cps/public_html/releases/");
#    htmlgen($revision);
#    system("rsync $revision -ae ssh root\@cpsupport.cpanel.net:/home/cps/public_html/changelog/");
#    system("rsync index.html -ae ssh root\@cpsupport.cpanel.net:/home/cps/public_html/releases/");
#    print "Done\n";
#    $ret .= "Revision #${revision} transfered to release server\nhttp://cpsupport.cpanel.net/releases/cPsupport-$revision.tar.gz\n";
#    $ret .= "http://cpsupport.cpanel.net/releases/cPsupport.tar.gz\n";
#}

print "Cleaning up build...";
system("rm -rf $pwd/cPsBuild");
unlink("index.html");
unlink("cPsupport-PREBUILD.tar.gz");
unlink("cPsupport-$revision.tar.gz");
unlink("cPsupport.tar.gz");
unlink("$revision");
print "Done\n";
print $ret;

sub htmlgen{
    print "HTML...";
    my ($author, $date);
    my $info = `svn info`;
    if ($info =~ /^Last Changed Date:\s(.+)$/m) {
        $date = $1;
    }
    else {
        die "\nCannot find date for release\n";
    }
    if ($info =~ /^Last Changed Author:\s(.+)$/m) {
        $author = $1;
    }
    else {
        die "\nCanot find author for release\n";
    }

    if ($info =~ /^Revision:\s(\d+)$/m) {
        $revision = $1;
    }
    else {
        die "\nCannot find revision # for release\n";
    }
    my $changelog = `svn log -r $revision`;
    
    open(CL,">$revision");
    print CL $changelog;
    close(CL);
    
    my $changerevision = $revision - 1;
    $changelog .= `svn log -r $changerevision`;
    $changerevision = $changerevision - 1;
    $changelog .= `svn log -r $changerevision`;
    $changerevision = $changerevision - 1;
    $changelog .= `svn log -r $changerevision`;
    $changerevision = $changerevision - 1;
    $changelog .= `svn log -r $changerevision`;
    
    
    $changelog =~ s/\n/\n<br\/>/g;
    
    if (-e "index.html") {
        unlink("index.html");
    }
    open(WEB,">index.html");
    
    
    print WEB <<EOM;
<html>
<head>
<title>cPsupport Download Page</title>
</head>
<body>
<h1>cPsupport Download Page</h1><br/>
Revision #: $revision</br>
Released on: $date</br>
By: $author</br>
Download: <a href="http://cpsupport.cpanel.net/releases/cPsupport.tar.gz">http://cpsupport.cpanel.net/releases/cPsupport.tar.gz</a></br>
</br>
<h2>Installation Instructions</h2><br/>
1) Login to your server as root<br/>
2) wget http://cpsupport.cpanel.net/releases/cPsupport.tar.gz<br/>
3) tar -zxf cPsupport.tar.gz<br/>
4) cd cPsBuild<br/>
5) perl install<br/>
<br/>
This will install the latest version of cPsupport on your server.<br/>
You will then need to login to WHM and allow the user to install cPsupport.<br/>
The user will then need to install cPsupport through cPanel.<br/>
<br/>
<br/>
---Change Log---<br/>
$changelog<br/>
<a href=http://cpsupport.cpanel.net/changelog/>more...</a><br/>
</body>
</html>
EOM
close(WEB);
return;
}
