/
Releases.pm6
64 lines (55 loc) · 1.59 KB
/
Releases.pm6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
my %platforms =
win => { bin => 'rakubrew.exe' },
macos => { bin => 'rakubrew' },
perl => { bin => 'rakubrew' },
;
class Release {
has UInt $.version;
has Str $.changes;
has IO::Path $.dir is required;
submethod TWEAK() {
$!version = $!dir.basename.Int;
$!changes = $!dir.add('changes').slurp.trim;
}
method get-bin($platform) {
die 'unknown platform' unless %platforms{$platform}:exists;
my $bin = $!dir.add($platform).add(%platforms{$platform}<bin>);
die 'file not found' unless $bin.f;
$bin;
}
}
class Releases {
has $.release-dir is required;
method !get-releases() {
my @releases;
@releases.push: Release.new(dir => $_) for $!release-dir.dir;
@releases .= sort: { $^b.version <=> $^a.version };
@releases;
}
method get-latest-bin($platform) {
my @releases = self!get-releases;
die 'no releases found' unless @releases.elems;
{
filename => %platforms{$platform}<bin>,
path => @releases[0].get-bin($platform),
}
}
method get-latest-version() {
self!get-releases()[0].version;
}
method get-index() {
my %index;
for self!get-releases -> $release {
%index<releases>.push: {
version => $release.version,
changes => $release.changes,
}
%index<latest> //= $release.version;
%index<latest> max= $release.version;
}
%index;
}
method platforms() {
%platforms.keys;
}
}