#!/usr/bin/env perl use v5.20; use strict; use warnings; use YAML::XS; sub die_with_sample { die <; }; my $template = do { local $/; ; }; my %builds = ( "64bit" => "-Duse64bitall", "64bit,threaded" => "-Dusethreads -Duse64bitall", ); die_with_sample unless defined $yaml->{releases}; die_with_sample unless ref $yaml->{releases} eq "ARRAY"; for my $release (@{$yaml->{releases}}) { do { die_with_sample unless $release->{$_}} for (qw(version pause sha1)); $release->{pause} =~ s#(((.).).*)#$3/$2/$1#; $release->{extra_flags} = "" unless defined $release->{extra_flags}; for my $config (keys %builds) { my $output = $template; $output =~ s/{{$_}}/$release->{$_}/mg for (qw(version pause extra_flags)); $output =~ s/{{args}}/$builds{$config}/mg; my $dir = sprintf "%i.%03i.%03i-%s", ($release->{version} =~ /(\d+)\.(\d+)\.(\d+)/), $config; open my $sha1, ">$dir/sha1.txt" or die "Couldn't open $dir/sha1.txt for writing"; print $sha1 "$release->{sha1} perl-$release->{version}.tar.bz2\n"; close $sha1; open my $dockerfile, ">$dir/Dockerfile" or die "Couldn't open $dir/Dockerfile for writing"; print $dockerfile $output; close $dockerfile; } } =pod =head1 NAME generate.pl =head1 SYNOPSIS generate.pl is a little helper script to reinitalize the Dockerfiles from a YAML file. =head1 DESCRIPTION generate.pl is meant to be run from the actual repo directory, with a Releases.yaml file correctly configured. It starts with a 'releases' key, which contains a list of releases, each with the following keys: =over 4 =item version The actual perl version, such as B<5.20.1>. =item sha1 The SHA-1 of the C<.tar.bz2> file for that release. =item pause The PAUSE (CPAN user) account that the release was uploaded to. =item (optionally) extra_args Additional text to pass to C. At the moment, this is necessary for 5.18.x so that it can get the C<-fwrapv> flag. =back =cut __DATA__ FROM buildpack-deps MAINTAINER Peter Martini RUN apt-get update && apt-get install -y curl procps RUN mkdir /usr/src/perl WORKDIR /usr/src/perl COPY sha1.txt /tmp/sha1.txt RUN curl -SL https://cpan.metacpan.org/authors/id/{{pause}}/perl-{{version}}.tar.bz2 -o perl-{{version}}.tar.bz2 \ && sha1sum -c /tmp/sha1.txt \ && tar --strip-components=1 -xjf perl-{{version}}.tar.bz2 -C /usr/src/perl \ && rm perl-{{version}}.tar.bz2 /tmp/sha1.txt RUN ./Configure {{args}} {{extra_flags}} -des \ && make -j$(nproc) \ && TEST_JOBS=$(nproc) make test_harness \ && make install \ && make veryclean WORKDIR /usr/src RUN curl -LO https://raw.githubusercontent.com/miyagawa/cpanminus/master/cpanm \ && chmod +x cpanm \ && ./cpanm App::cpanminus \ && rm -fr /root/.cpanm \ && rm ./cpanm WORKDIR /root CMD ["perl{{version}}","-de0"]