Author: bursa
Date: Tue Nov 28 22:18:58 2006
New Revision: 3078
URL:
http://svn.semichrome.net?rev=3078&view=rev
Log:
New NetSurf autobuilder.
Added:
trunk/netsurfbuild/autobuild.pl (with props)
trunk/netsurfbuild/svnlog2html.xslt
Added: trunk/netsurfbuild/autobuild.pl
URL:
http://svn.semichrome.net/trunk/netsurfbuild/autobuild.pl?rev=3078&vi...
==============================================================================
--- trunk/netsurfbuild/autobuild.pl (added)
+++ trunk/netsurfbuild/autobuild.pl Tue Nov 28 22:18:58 2006
@@ -1,0 +1,191 @@
+#!/usr/bin/perl
+#
+# NetSurf autobuilder.
+#
+
+use strict;
+use warnings;
+
+open LOG, ">autobuild.log" or die "failed to open autobuild.log:
$!\n";
+
+sub command {
+ my $cmd = shift;
+ print LOG "> $cmd\n";
+ my @output = `$cmd 2>&1`;
+ foreach my $line (@output) {
+ print LOG "| $line";
+ }
+ my $status = $? / 256;
+ print LOG "exit status $status\n" if $status;
+ print LOG "\n";
+ die "$cmd:\nexit status $status\n" if $status;
+ return @output;
+}
+
+sub load {
+ my $path = shift;
+ open FILE, $path or die "failed to open $path: $!\n";
+ my $data;
+ {
+ local $/ = undef;
+ $data = <FILE>;
+ }
+ close FILE;
+ return $data;
+}
+
+sub save {
+ my ($path, $data) = @_;
+ open FILE, ">$path" or die "failed to open $path: $!\n";
+ print FILE $data;
+ close FILE;
+}
+
+
+# find where we are being run
+my $root = (command("pwd"))[0];
+chomp $root;
+
+# determine build date time
+my $date = (command("date -u '+%d %b %Y %H:%M'"))[0];
+chomp $date;
+my $version = "Test Build ($date)";
+
+# update from repository
+my @update = command("svn update --non-interactive netsurf");
+@update = grep !/^At revision/, @update;
+
+# continue only if there were updates
+unless (scalar @update) {
+ print LOG "no updates\n";
+ exit;
+}
+
+# update web documents
+command("svn update --non-interactive netsurfweb");
+
+# create version.c
+save('netsurf/desktop/version.c',
+ "const char * const netsurf_version = \"$version\";\n");
+
+# build RISC OS version
+chdir "$root/netsurf";
+command("make riscos riscos_small");
+chdir $root;
+command("rm --recursive --force --verbose !NetSurf");
+command("rsync --archive --verbose --exclude=.svn netsurf/!NetSurf .");
+
+# copy docs, processing as required
+sub process_html {
+ my ($source, $dest, $language) = @_;
+ my $html = load($source);
+ $html =~ s{a href="([a-z]+)((#[a-zA-Z]+)?)"}
+ {a href="$1_$language$2"}g;
+ $html =~ s{a href="([a-z]+)[.]([a-z][a-z])((#[a-zA-Z]+)?)"}
+ {a href="$1_$2$3"}g;
+ $html =~ s{src="([a-z\/]+)[.]([a-z][a-z])"}
+ {src="$1_$2"}g;
+ $html =~ s{"netsurf.css"}
+ {"netsurf"}g;
+ $html =~ s{"([a-z]+).png"}
+ {"$1_png"}g;
+ $html =~ s{href="/"}
+ {href="intro_$language"}g;
+ $html =~ s{VERSION}
+ {$version}g;
+ save($dest, $html);
+}
+
+chdir "$root/netsurfweb";
+my @docs = glob '*';
+chdir $root;
+foreach my $doc (@docs) {
+ my $source = "netsurfweb/$doc";
+ print LOG "$source ";
+ if ($doc =~ /([a-z]+)[.]([a-z][a-z])$/) { # html with language extension
+ my $leaf = $1;
+ my $language = $2;
+ my $dest = "!NetSurf/Docs/${leaf}_$language,faf";
+ print LOG "=> $dest (html)\n";
+ process_html($source, $dest, $language);
+ } elsif ($doc =~ /(.*)[.]css$/) {
+ my $dest = "!NetSurf/Docs/$1,f79";
+ print LOG "=> $dest\n";
+ command("cp --archive --verbose $source $dest");
+ } elsif ($doc =~ /(.*)[.]png$/) {
+ my $dest = "!NetSurf/Docs/$1_png,b60";
+ print LOG "=> $dest\n";
+ command("cp --archive --verbose $source $dest");
+ } else {
+ print LOG "(skipped)\n";
+ }
+}
+
+print LOG "!NetSurf/Docs/about,faf (html)\n";
+process_html('!NetSurf/Docs/about,faf', '!NetSurf/Docs/about,faf',
'en');
+
+mkdir '!NetSurf/Docs/images', 0755;
+foreach my $png (glob 'netsurfweb/images/*') {
+ $png =~ /images\/(.*)[.]png$/;
+ my $leaf = $1;
+ $leaf =~ s/[.]/_/g;
+ command("cp --archive --verbose $png !NetSurf/Docs/images/$leaf,b60");
+}
+
+# create zip for regular build
+my $slot_size = (command('./slotsize !NetSurf/!RunImage,ff8'))[0];
+my $run = load('netsurf/!NetSurf/!Run,feb');
+$run =~ s/2240/$slot_size/g;
+save('!NetSurf/!Run,feb', $run);
+command('/home/riscos/cross/bin/zip -9vr, netsurf.zip !NetSurf');
+command('mv --verbose netsurf.zip builds/');
+
+# TODO make RiscPkg package
+#my $pkg_version = (command("date -u '+0.%Y.%m.%d.%H%M'"))[0];
+#chomp $pkg_version;
+
+# create zip for small build
+command('cp --archive --verbose netsurf/u!RunImage,ff8 !NetSurf/!RunImage,ff8');
+$slot_size = (command('./slotsize !NetSurf/!RunImage,ff8'))[0];
+$run = load('netsurf/!NetSurf/!Run,feb');
+$run =~ s/2240/$slot_size/g;
+save('!NetSurf/!Run,feb', $run);
+command('/home/riscos/cross/bin/zip -9vr, unetsurf.zip !NetSurf');
+command('mv --verbose unetsurf.zip builds/');
+
+# TODO nstheme
+
+# get log of recent changes
+my $week_ago = (command("date --date='7 days ago' '+%F'"))[0];
+chomp $week_ago;
+command("svn log --verbose --revision '{$week_ago}:HEAD' --xml " .
+ 'svn://semichrome.net/ > log.xml');
+my @log = command('xsltproc svnlog2html.xslt log.xml');
+
+# create builds page
+my $size_netsurf = sprintf "%.1fM", (-s 'builds/netsurf.zip') /
1048576;
+my $size_unetsurf = sprintf "%.1fM", (-s 'builds/unetsurf.zip') /
1048576;
+my $size_nstheme = sprintf "%.1fM", (-s 'builds/nstheme.zip') /
1048576;
+my $format = "'+%d %b %Y %H:%M'";
+my $date_nstheme = (command("date -u -r builds/nstheme.zip $format"))[0];
+my @langs = map { s/.*[.]//; $_ } glob 'builds/top.*';
+foreach my $lang (@langs) {
+ print LOG "builds/index.$lang\n";
+ my $page = load("builds/top.$lang");
+ $page =~ s/SIZE_NETSURF/$size_netsurf/g;
+ $page =~ s/DATE_NETSURF/$date UTC/g;
+ $page =~ s/SIZE_UNETSURF/$size_unetsurf/g;
+ $page =~ s/DATE_UNETSURF/$date UTC/g;
+ $page =~ s/SIZE_NSTHEME/$size_nstheme/g;
+ $page =~ s/DATE_NSTHEME/$date_nstheme UTC/g;
+ $page .= join '', @log;
+ $page .= load("builds/bottom.$lang");
+ save("builds/index.$lang", $page);
+}
+
+# rsync to website
+command('rsync --verbose --compress --times ' .
+ 'builds/*.zip builds/index.* ' .
+ 'netsurf@pike.pepperfish.net:/home/netsurf/websites/' .
+ 'www.netsurf-browser.org/docroot/builds/');
+
Propchange: trunk/netsurfbuild/autobuild.pl
------------------------------------------------------------------------------
svn:executable = *
Added: trunk/netsurfbuild/svnlog2html.xslt
URL:
http://svn.semichrome.net/trunk/netsurfbuild/svnlog2html.xslt?rev=3078&am...
==============================================================================
--- trunk/netsurfbuild/svnlog2html.xslt (added)
+++ trunk/netsurfbuild/svnlog2html.xslt Tue Nov 28 22:18:58 2006
@@ -1,0 +1,37 @@
+<?xml version="1.0"?>
+<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
+ <xsl:output method="html" encoding="iso-8859-1"
media-type="text/html"/>
+
+ <xsl:template match="log">
+ <div class="changelog">
+ <xsl:for-each select="logentry">
+ <xsl:sort select="@revision" date-type="number"
order="descending"/>
+ <div class="entry">
+ <p class="meta">
+ <span class="date">
+ <xsl:value-of select="substring(date, 1, 10)"/>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="substring(date, 12, 5)"/>
+ </span>
+ <xsl:text> - </xsl:text>
+ <em class="author"><xsl:value-of
select="author"/></em>
+ <xsl:text> - </xsl:text>
+ <small class="files">
+ <xsl:for-each select="paths/path">
+ <a href="http://svn.semichrome.net{.}">
+ <xsl:value-of select="substring(., 2)"/>
+ </a>
+ <xsl:if test="position() != last()">, </xsl:if>
+ </xsl:for-each>
+ </small>
+ </p>
+ <p class="msg">
+ <xsl:value-of select="msg"/>
+ </p>
+ </div>
+ </xsl:for-each>
+ </div>
+ </xsl:template>
+
+</xsl:stylesheet>
+