diff --git a/release/release-deb.pl b/release/release-deb.pl new file mode 100755 index 0000000000000000000000000000000000000000..65647b21a47b97b8b9a36ef56ac376fd7f561498 --- /dev/null +++ b/release/release-deb.pl @@ -0,0 +1,129 @@ +#!/usr/bin/perl + +# Makes deb file based on release tag +# + +use strict; + +my $TESTING = 0; +print "TESTING MODE (no commits)\n" if ($TESTING); + +unless (@ARGV == 1) { + print stderr "Missing arguments: version\n"; + print stderr " for example: release-deb.pl 3.1.0\n"; + exit(1); +} + +my $RELDIR = `pwd`; # The release directory +chomp $RELDIR; +#my $TSKDIR = "$RELDIR/../"; +my $TSKDIR = "$RELDIR/sleuthkit/"; + +my $VER = $ARGV[0]; +my $TAGNAME = "sleuthkit-${VER}"; +my $TARFILE = "${TSKDIR}/../sleuthkit-java_${VER}.orig.tar.xz"; +my $DEBFILE = "${TSKDIR}/../sleuthkit-java_${VER}-1_amd64.deb"; +die ("ERROR: ${TARFILE} file already exists") if (-e ${TARFILE}); +die ("ERROR: ${DEBFILE} file already exists") if (-e ${DEBFILE}); + + + +####################### + +# Function to execute a command and send output to pipe +# returns handle +# exec_pipe(HANDLE, CMD); +sub exec_pipe { + my $handle = shift(@_); + my $cmd = shift(@_); + + die "Can't open pipe for exec_pipe" + unless defined(my $pid = open($handle, '-|')); + + if ($pid) { + return $handle; + } + else { + $| = 1; + exec("$cmd") or die "Can't exec program: $!"; + } +} + + + +# Read a line of text from an open exec_pipe handle +sub read_pipe_line { + my $handle = shift(@_); + my $out; + + for (my $i = 0; $i < 100; $i++) { + $out = <$handle>; + return $out if (defined $out); + } + return $out; +} + + + +############## CODE SPECIFIC STUFF ########## + +# Checkout a specific tag +# Starts and ends in sleuthkit +sub update_code { + + `git reset --hard HEAD > /dev/null`; + # Make sure we have no changes in the current tree + exec_pipe(*OUT, "git status -s | grep \"^ M\""); + my $foo = read_pipe_line(*OUT); + if ($foo ne "") { + print "Changes stil exist in current repository -- commit them\n"; + die "stopping"; + } + + # Make sure src dir is up to date + print "Updating source directory\n"; + `git checkout develop`; + `git pull`; + + # Verify the tag exists + exec_pipe(*OUT, "git tag | grep \"^${TAGNAME}\""); + my $foo = read_pipe_line(*OUT); + if ($foo eq "") { + print "Tag ${TAGNAME} doesn't exist\n"; + die "stopping"; + } + close(OUT); + + `git checkout -q ${TAGNAME}`; +} + + +# Make deb +sub build_deb { + print "Running bootstrap\n"; + `rm configure`; + `./bootstrap`; + die ("Configure missing") unless (-e "configure"); + + + print "Running 'dh_make'. Ignore messages about overwriting, and it's OK if it goes blank\n"; + `dh_make --s -y -e \“info\@sleuthkit.org\” -p sleuthkit-java_${VER} --createorig`; + + die ("ERROR: ${TARFILE} file not created") unless (-e ${TARFILE}); + + print "Running debuild\n"; + `debuild -us -uc`; + if (-e ${DEBFILE}) { + print "${DEBFILE} created\n"; + } else { + die "deb file was not created\n"; + } +} + + +############################## + +chdir ("$TSKDIR") or die "Error changing to TSK dir $TSKDIR"; + +update_code(); +build_deb();