40 lines
1.4 KiB
Perl
Executable File
40 lines
1.4 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
# vim:ts=4:sw=4:expandtab
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Data::Dumper;
|
|
use HTTP::Tiny; # in core since v5.13.9
|
|
use JSON::PP; # in core since v5.13.9
|
|
use MIME::Base64; # in core since v5.7
|
|
use v5.13;
|
|
|
|
my $repo = shift;
|
|
|
|
my $auth = $ENV{'BINTRAY_USER'} . ':' . $ENV{'BINTRAY_KEY'};
|
|
die "BINTRAY_USER and/or BINTRAY_KEY environment variables not set" if $auth eq ':';
|
|
# TODO(stapelberg): switch to putting $auth into the URL once perl-modules ≥
|
|
# 5.20 is available on travis (Ubuntu Wily or newer).
|
|
my $auth_header = 'Basic ' . MIME::Base64::encode_base64($auth, "");
|
|
my $apiurl = 'https://api.bintray.com/packages/i3/' . $repo . '/i3-wm';
|
|
my $client = HTTP::Tiny->new(
|
|
verify_SSL => 1,
|
|
default_headers => {
|
|
'authorization' => $auth_header,
|
|
});
|
|
my $resp = $client->get($apiurl);
|
|
die "Getting versions failed: HTTP status $resp->{status} (content: $resp->{content})" unless $resp->{success};
|
|
my $decoded = decode_json($resp->{content});
|
|
my @versions = reverse sort {
|
|
(system("/usr/bin/dpkg", "--compare-versions", "$a", "gt", "$b") == 0) ? 1 : -1
|
|
} @{$decoded->{versions}};
|
|
|
|
# Keep the most recent 5 versions.
|
|
splice(@versions, 0, 5);
|
|
|
|
for my $version (@versions) {
|
|
say "Deleting old version $version";
|
|
$resp = $client->request('DELETE', "$apiurl/versions/$version");
|
|
die "Deletion of version $version failed: HTTP status $resp->{status} (content: $resp->{content})" unless $resp->{success};
|
|
}
|