14f49aa6d3
…instead of lexicographically sorting strings, which fails for the following situation: 4.12-96-g086276b 4.12-97-g59c070b 4.12-108-gb850cfb This bug resulted in new packages being built and uploaded, then immediately deleted. Thanks to eeemsi for reporting the issue.
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};
|
|
}
|