diff --git a/.template-helpers/generate-tag-details.pl b/.template-helpers/generate-tag-details.pl index f2eeb66e1..baaadbf58 100755 --- a/.template-helpers/generate-tag-details.pl +++ b/.template-helpers/generate-tag-details.pl @@ -124,6 +124,34 @@ sub get_layer_data { sub cmd_to_dockerfile { my ($cmd) = @_; + + if (@$cmd == 1) { + # likely 1.10+ squashed string :( + # https://github.com/docker/docker/issues/22436 + # let's strip and "parse" to get as close to readable as we can + + my $shC = '/bin/sh -c '; + my $nop = '#(nop) '; + + my $str = $cmd->[0]; + my @prefix = (); + if ($str =~ s!^[|]\d+ (.*?) (\Q$shC\E)!$2!) { + push @prefix, '# ARGS: ' . $1; + } + if (substr($str, 0, 1) eq '|' && !@prefix) { + # must be something like: + # |6 a=1 b=2 c=3 d=4 e=a b c f=a b " c echo $a + # (and thus impossible to parse as-is) + return '# unable to parse image command string further:' . "\n" . $str; + } + $str =~ s!^\Q$shC\E!!; + unless ($str =~ s!^\Q$nop\E!!) { + # if we don't have "#(nop)", RUN is implied + $str = 'RUN ' . $str; + } + return join "\n", @prefix, $str; + } + my @buildArgs; if (substr($cmd->[0], 0, 1) eq '|') { # must have some build args for this RUN line @@ -208,7 +236,7 @@ while (my $image = shift) { $totals{$_} += $data->{$_} for keys %totals; } print "\n"; - say "-\t" . 'Total Virtual Size: ' . size($totals{virtual_size}); + say "-\t" . 'Total Virtual Size: ' . size($totals{virtual_size}) if $totals{virtual_size}; say "-\t" . 'Total v2 Content-Length: ' . size($totals{blob_content_length}); print "\n"; say '### Layers (' . scalar(keys %parentChild) . ')'; @@ -227,7 +255,7 @@ while (my $image = shift) { say "-\t" . 'Created: ' . date($data->{created}) if $data->{created}; say "-\t" . 'Parent Layer: `' . $data->{parent} . '`' if $data->{parent}; say "-\t" . 'Docker Version: ' . $data->{docker_version} if $data->{docker_version}; - say "-\t" . 'Virtual Size: ' . size($data->{virtual_size}); + say "-\t" . 'Virtual Size: ' . size($data->{virtual_size}) if $totals{virtual_size}; say "-\t" . 'v2 Blob: `' . $data->{blob} . '`'; say "-\t" . 'v2 Content-Length: ' . size($data->{blob_content_length}); say "-\t" . 'v2 Last-Modified: ' . date($data->{blob_last_modified}) if $data->{blob_last_modified};