Skip to content

Commit 9e34ee4

Browse files
committed
generate.pl: Support building for multiple Debian releases
This adds generating Dockerfiles for each Perl version on multiple Debian releases, such as for the current 5.30.x to support both Debian 10 (buster) and 9 (stretch). We also change the directory structure to better indicate which Debian release it provides for.
1 parent 92233bc commit 9e34ee4

File tree

1 file changed

+55
-44
lines changed

1 file changed

+55
-44
lines changed

generate.pl

Lines changed: 55 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -139,58 +139,60 @@ sub die_with_sample {
139139
}
140140

141141
for my $build (keys %builds) {
142-
$release->{url} = $url;
142+
$release->{url} = $url;
143143
$release->{"cpanm_dist_$_"} = $cpanm{$_} for keys %cpanm;
144144

145145
$release->{extra_flags} ||= '';
146-
$release->{debian_release} ||= 'stretch';
146+
$release->{debian_release} ||= ['stretch'];
147147

148-
if ($build =~ /main/) {
149-
$release->{image} = 'buildpack-deps';
150-
$release->{tag} = $release->{debian_release};
151-
}
152-
else {
153-
$release->{image} = 'debian';
154-
$release->{tag} = "@{[ $release->{debian_release} ]}-slim";
155-
}
148+
$release->{image} = $build =~ /main/ ? 'buildpack-deps' : 'debian';
156149

157-
my $output = $template;
158-
$output =~ s/\{\{$_\}\}/$release->{$_}/mg
159-
for (qw(version pause extra_flags sha256 type url image tag cpanm_dist_name cpanm_dist_url cpanm_dist_sha256));
160-
$output =~ s/\{\{args\}\}/$builds{$build}/mg;
161-
162-
if ($build =~ /slim/) {
163-
$output =~ s/\{\{docker_slim_run_install\}\}/$docker_slim_run_install/mg;
164-
$output =~ s/\{\{docker_slim_run_purge\}\}/$docker_slim_run_purge/mg;
165-
}
166-
else {
167-
$output =~ s/\{\{docker_slim_run_install\}\}/true/mg;
168-
$output =~ s/\{\{docker_slim_run_purge\}\}/true/mg;
150+
if (ref $release->{debian_release} ne 'ARRAY') {
151+
$release->{debian_release} = [$release->{debian_release}];
169152
}
170153

171-
my $dir = sprintf "%i.%03i.%03i-%s", ($release->{version} =~ /(\d+)\.(\d+)\.(\d+)/), $build;
172-
173-
mkdir $dir unless -d $dir;
174-
175-
# Set up the generated DevelPatchPerl.patch
176-
{
177-
open my $fh, ">", "$dir/DevelPatchPerl.patch";
178-
print $fh $patch;
154+
for my $debian_release (@{$release->{debian_release}}) {
155+
156+
my $output = $template;
157+
$output =~ s/\{\{$_\}\}/$release->{$_}/mg
158+
for (qw(version pause extra_flags sha256 type url image cpanm_dist_name cpanm_dist_url cpanm_dist_sha256));
159+
$output =~ s/\{\{args\}\}/$builds{$build}/mg;
160+
161+
if ($build =~ /slim/) {
162+
$output =~ s/\{\{docker_slim_run_install\}\}/$docker_slim_run_install/mg;
163+
$output =~ s/\{\{docker_slim_run_purge\}\}/$docker_slim_run_purge/mg;
164+
$output =~ s/\{\{tag\}\}/$debian_release-slim/mg;
165+
}
166+
else {
167+
$output =~ s/\{\{docker_slim_run_install\}\}/true/mg;
168+
$output =~ s/\{\{docker_slim_run_purge\}\}/true/mg;
169+
$output =~ s/\{\{tag\}\}/$debian_release/mg;
170+
}
171+
172+
my $dir = sprintf "%i.%03i.%03i-%s-%s", ($release->{version} =~ /(\d+)\.(\d+)\.(\d+)/), $build, $debian_release;
173+
174+
mkdir $dir unless -d $dir;
175+
176+
# Set up the generated DevelPatchPerl.patch
177+
{
178+
open my $fh, ">", "$dir/DevelPatchPerl.patch";
179+
print $fh $patch;
180+
}
181+
182+
if (defined $release->{test_parallel} && $release->{test_parallel} eq "no") {
183+
$output =~ s/\{\{test\}\}/make test_harness/;
184+
}
185+
elsif (!defined $release->{test_parallel} || $release->{test_parallel} eq "yes") {
186+
$output =~ s/\{\{test\}\}/TEST_JOBS=\$(nproc) make test_harness/;
187+
}
188+
else {
189+
die "test_parallel was provided for $release->{version} but is invalid; should be 'yes' or 'no'\n";
190+
}
191+
192+
open my $dockerfile, ">", "$dir/Dockerfile" or die "Couldn't open $dir/Dockerfile for writing";
193+
print $dockerfile $output;
194+
close $dockerfile;
179195
}
180-
181-
if (defined $release->{test_parallel} && $release->{test_parallel} eq "no") {
182-
$output =~ s/\{\{test\}\}/make test_harness/;
183-
}
184-
elsif (!defined $release->{test_parallel} || $release->{test_parallel} eq "yes") {
185-
$output =~ s/\{\{test\}\}/TEST_JOBS=\$(nproc) make test_harness/;
186-
}
187-
else {
188-
die "test_parallel was provided for $release->{version} but is invalid; should be 'yes' or 'no'\n";
189-
}
190-
191-
open my $dockerfile, ">", "$dir/Dockerfile" or die "Couldn't open $dir/Dockerfile for writing";
192-
print $dockerfile $output;
193-
close $dockerfile;
194196
}
195197
}
196198

@@ -237,6 +239,15 @@ =head1 DESCRIPTION
237239
L<https://hub.docker.com/_/buildpack-deps|buildpack-deps> and
238240
L<https://hub.docker.com/_/debian|debian> Docker images.
239241
242+
This can be a single tag, or a list of tags to generate multiple
243+
Dockerfiles for different Debian versions:
244+
245+
- version: 5.30.0
246+
type: xz
247+
debian_release:
248+
- stretch
249+
- buster
250+
240251
Defaults: C<stretch> for C<main> builds, C<stretch-slim> for C<slim>
241252
builds.
242253

0 commit comments

Comments
 (0)