summarylogtreecommitdiffstats
path: root/generator.pl
diff options
context:
space:
mode:
authorAlex Talker2016-11-06 19:59:36 +0300
committerAlex Talker2016-11-06 19:59:36 +0300
commit8719685eba8317ac173612907f0d05800baf4b7a (patch)
tree04b719b5497d309a0636be966ed2ad574127099d /generator.pl
parentbf9eaf3b276007759928e2387da47ee68d25f7ff (diff)
downloadaur-8719685eba8317ac173612907f0d05800baf4b7a.tar.gz
Add generator.pl
Diffstat (limited to 'generator.pl')
-rw-r--r--generator.pl104
1 files changed, 104 insertions, 0 deletions
diff --git a/generator.pl b/generator.pl
new file mode 100644
index 000000000000..9a657a70eae0
--- /dev/null
+++ b/generator.pl
@@ -0,0 +1,104 @@
+#!/usr/bin/perl
+use v5.10;
+use strict;
+use warnings;
+use experimental 'smartmatch';
+use Tie::File;
+use Template;
+use LWP::UserAgent;
+use HTML::TreeBuilder;
+use List::Util qw(maxstr);
+
+use constant {
+ ROOT => 'http://ftp.mozilla.org/pub/thunderbird/nightly/',
+};
+
+sub _find_max {
+ my ($tree, $filter) = @_;
+
+ my @values = map { $_->as_text } $tree->find('a');
+ @values = grep { $_ ~~ $filter } @values if defined $filter;
+
+ unless(@values) {
+ say "No values can be extracted.";
+ exit 1;
+ }
+
+ return maxstr @values;
+}
+
+sub _get_tree {
+ my ($ua, $url) = @_;
+
+ my $req = HTTP::Request->new(GET => $url);
+ my $res = $ua->request($req);
+
+ if ( $res->is_success ) {
+ my $tree = HTML::TreeBuilder->new_from_content($res->content);
+ return $tree;
+ }
+ else {
+ say "Request $url is failed";
+ exit 2;
+ }
+}
+
+sub _get_part {
+ my ($ua, $uri, $filter) = @_;
+
+ return _find_max(_get_tree($ua, $uri), $filter);
+}
+
+sub _get_data {
+ my ($ua, $lang) = @_;
+ $lang //= 'en-US';
+ my $uri = ROOT;
+ my $is_num = qr/^\d+/;
+ my $data = {};
+
+ my $year = _get_part($ua,$uri, $is_num);
+ $uri .= $year;
+ $year =~ s:/::;
+ $data->{year} = $year;
+
+ my $month = _get_part($ua, $uri, $is_num);
+ $uri .= $month;
+ $month =~ s:/::;
+ $data->{month} = $month;
+
+ my $release = _get_part($ua, $uri, qr(aurora-l10n/$));
+ $uri .= $release;
+ $release =~ /^\d{4}-\d{2}-(?<day>\d+)-(?<hour>\d+)-(?<minute>\d+)-(?<second>\d+)/;
+ $data = { %$data, %+ };
+
+ my $package_i686 = _get_part($ua, $uri, qr($lang.linux-i686.tar.bz2$));
+ my $package_i686_sums = _get_part($ua, $uri, qr($lang.linux-i686.checksums$));
+ $data->{sha512sums_i686} = _get_hashsum($ua, $uri . $package_i686_sums, $package_i686);
+
+ my $package_x86_64 = _get_part($ua, $uri, qr($lang.linux-x86_64.tar.bz2$));
+ my $package_x86_64_sums = _get_part($ua, $uri, qr($lang.linux-x86_64.checksums$));
+ $data->{sha512sums_x86_64} = _get_hashsum($ua, $uri . $package_x86_64_sums, $package_x86_64);
+
+ $data->{version} = $1 if $package_x86_64 =~ /thunderbird-(\d+)/;
+
+ return $data;
+}
+
+sub _get_hashsum {
+ my ($ua, $uri, $file) = @_;
+
+ my $req = HTTP::Request->new(GET => $uri);
+ my $res = $ua->request($req);
+ if ( $res->is_success ) {
+ $res->content =~ /(?<sum>[0-9a-f]+) sha512 [\d]+ $file/m;
+ return $+{sum};
+ }
+}
+
+my $ua = LWP::UserAgent->new;
+my $data = _get_data($ua, 'ru');
+
+my $t = Template->new(RELATIVE => 1);
+
+say "Generate PKGBUILD for version $data->{version}...";
+$t->process('PKGBUILD.template', $data, 'PKGBUILD') || die $t->error();