]> git.sur5r.net Git - i3/i3/blob - travis/cleanup-bintray.pl
travis/cleanup-bintray: use dpkg --compare-versions (#2453)
[i3/i3] / travis / cleanup-bintray.pl
1 #!/usr/bin/env perl
2 # vim:ts=4:sw=4:expandtab
3
4 use strict;
5 use warnings;
6 use Data::Dumper;
7 use HTTP::Tiny; # in core since v5.13.9
8 use JSON::PP; # in core since v5.13.9
9 use MIME::Base64; # in core since v5.7
10 use v5.13;
11
12 my $repo = shift;
13
14 my $auth = $ENV{'BINTRAY_USER'} . ':' . $ENV{'BINTRAY_KEY'};
15 die "BINTRAY_USER and/or BINTRAY_KEY environment variables not set" if $auth eq ':';
16 # TODO(stapelberg): switch to putting $auth into the URL once perl-modules ≥
17 # 5.20 is available on travis (Ubuntu Wily or newer).
18 my $auth_header = 'Basic ' . MIME::Base64::encode_base64($auth, "");
19 my $apiurl = 'https://api.bintray.com/packages/i3/' . $repo . '/i3-wm';
20 my $client = HTTP::Tiny->new(
21     verify_SSL => 1,
22     default_headers => {
23         'authorization' => $auth_header,
24     });
25 my $resp = $client->get($apiurl);
26 die "Getting versions failed: HTTP status $resp->{status} (content: $resp->{content})" unless $resp->{success};
27 my $decoded = decode_json($resp->{content});
28 my @versions = reverse sort {
29     (system("/usr/bin/dpkg", "--compare-versions", "$a", "gt", "$b") == 0) ? 1 : -1
30 } @{$decoded->{versions}};
31
32 # Keep the most recent 5 versions.
33 splice(@versions, 0, 5);
34
35 for my $version (@versions) {
36     say "Deleting old version $version";
37     $resp = $client->request('DELETE', "$apiurl/versions/$version");
38     die "Deletion of version $version failed: HTTP status $resp->{status} (content: $resp->{content})" unless $resp->{success};
39 }