Skip to content

Commit f36481d

Browse files
tianonzakame
authored andcommitted
Add basic "library.pl" script for generating "library/perl" file
This accepts an optional `--eol` flag to also include the EOL versions (with a big comment about removing them post-build).
1 parent 22f7d64 commit f36481d

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

library.pl

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#!/usr/bin/env perl
2+
use 5.014;
3+
use strict;
4+
use warnings;
5+
use YAML::XS;
6+
7+
my %arches = (
8+
# https://github.com/docker-library/official-images/blob/master/library/debian
9+
buster => 'amd64, arm32v7, arm64v8, i386, ppc64le, s390x',
10+
stretch => 'amd64, arm32v7, arm64v8, i386',
11+
);
12+
13+
print <<"END_HEADER";
14+
Maintainers: Peter Martini <PeterCMartini\@GMail.com> (\@PeterMartini),
15+
Zak B. Elep <zakame\@cpan.org> (\@zakame)
16+
GitRepo: https://github.com/perl/docker-perl.git
17+
GitCommit: @{[ qx{ git log -1 --format=format:%H } ]}
18+
Architectures: $arches{buster}
19+
END_HEADER
20+
21+
sub suffix {
22+
my $suffix = shift;
23+
return map { $_ eq 'latest' ? $suffix : $_ . '-' . $suffix } @_;
24+
}
25+
26+
sub entry {
27+
my $version = shift;
28+
my $build = shift;
29+
my $debian = shift;
30+
my $eol = shift // 0;
31+
32+
my @versionAliases = ();
33+
34+
my @version = split /[.]/, $version;
35+
for my $i (reverse 0 .. @version-1) {
36+
push @versionAliases, join '.', @version[0 .. $i];
37+
}
38+
39+
push @versionAliases, 'latest';
40+
41+
(my $buildSuffix = $build) =~ s/^main,//;
42+
$buildSuffix =~ s/,/-/g;
43+
my @buildAliases = ($build eq 'main' ? @versionAliases : suffix $buildSuffix, @versionAliases);
44+
45+
my @debianAliases = suffix $debian, @buildAliases;
46+
47+
my @aliases = ( ($eol ? () : @buildAliases), @debianAliases );
48+
49+
state %latest = ();
50+
@aliases = grep { !defined $latest{$_} } @aliases;
51+
@latest{ @aliases } = ( 1 ) x @aliases;
52+
53+
print <<~"END_ENTRY";
54+
55+
Tags: @{[ join ', ', @aliases ]}@{[ defined $arches{$debian} ? "\nArchitectures: $arches{$debian}" : '' ]}
56+
Directory: @{[ ($eol ? 'eol/' : '') . sprintf '%i.%03i.%03i-%s-%s', @version, $build, $debian ]}
57+
END_ENTRY
58+
}
59+
60+
sub release {
61+
my $release = shift;
62+
my $builds = shift;
63+
my $eol = shift // 0;
64+
65+
my @builds = (@$builds, map { "$_,threaded" } @$builds);
66+
67+
for my $build (@builds) {
68+
for my $debian (reverse @{ $release->{debian_release} }) {
69+
entry $release->{version}, $build, $debian, $eol;
70+
}
71+
}
72+
}
73+
74+
my $config = do {
75+
open my $fh, '<', 'config.yml' or die "Couldn't open config";
76+
local $/;
77+
Load <$fh>;
78+
};
79+
80+
release $_, $config->{builds} for (reverse @{ $config->{releases} });
81+
82+
exit unless @ARGV == 1 && $ARGV[0] eq '--eol';
83+
84+
print <<END_EOL_COMMENT;
85+
86+
#
87+
# THE FOLLOWING (EOL) TAGS ARE INTENDED AS A ONE-TIME BACKFILL/REBUILD
88+
#
89+
# (they will be removed after they are successfully rebuilt)
90+
#
91+
END_EOL_COMMENT
92+
93+
$config = do {
94+
open my $fh, '<', 'eol/config.yml' or die "Couldn't open config";
95+
local $/;
96+
Load <$fh>;
97+
};
98+
99+
release $_, $config->{builds}, 1 for (reverse @{ $config->{releases} });

0 commit comments

Comments
 (0)