|
31 | 31 | ); |
32 | 32 | my %aliases_rev; |
33 | 33 |
|
34 | | -my %use_builder = map {$_ => 1} qw( noble plucky questing ); |
| 34 | +my %multi_platform = map {$_ => 1} qw( noble plucky questing ); |
35 | 35 |
|
36 | 36 | while (my ($alias, $name) = each %aliases) { |
37 | 37 | $aliases_rev{$name} ||= []; |
|
52 | 52 | } |
53 | 53 | my $dockerfile = path("$name/Dockerfile")->slurp; |
54 | 54 | my ($from) = $dockerfile =~ /^FROM (\S+)/; |
55 | | - system("docker pull $from"); |
56 | | - if ($builder && $use_builder{$name}) { |
| 55 | + system("docker pull $from") if $no_cache; |
| 56 | + if ($builder && $multi_platform{$name}) { |
57 | 57 | system("docker buildx build --builder $builder --platform linux/amd64,linux/arm64 $name $tags --output=type=image" . ($no_cache ? " --no-cache" : "") . ($push ? " --push" : "") . " 2>&1 | tee log/build_$name.log"); |
58 | 58 | } else { |
59 | | - system("docker build $name $tags" . ($no_cache ? " --no-cache" : "") . " 2>&1 | tee log/build_$name.log"); |
| 59 | + if ($push) { |
| 60 | + if ($multi_platform{$name}) { |
| 61 | + say "$name requires multi-platform build to push"; |
| 62 | + } else { |
| 63 | + my $id = `docker images movabletype/test:$name --no-trunc --format '{{.ID}}'`; |
| 64 | + chomp $id; |
| 65 | + die "Image not found: $name" unless $id; |
| 66 | + |
| 67 | + say "$name : $id"; |
| 68 | + |
| 69 | + my @tags = map { s/ .*//r } |
| 70 | + grep { /$id/ } |
| 71 | + split /\n/, `docker images -f 'reference=movabletype/test:*' --no-trunc --format '{{.Tag}} {{.ID}}'`; |
| 72 | + |
| 73 | + for my $tag (@tags) { |
| 74 | + system("docker push movabletype/test:$tag"); |
| 75 | + } |
| 76 | + } |
| 77 | + } else { |
| 78 | + system("docker build $name $tags" . ($no_cache ? " --no-cache" : "") . " 2>&1 | tee log/build_$name.log"); |
| 79 | + } |
60 | 80 | } |
61 | 81 | my $log = path("log/build_$name.log")->slurp; |
62 | | - if ($log =~ m!(naming to docker.io/movabletype/test:$name (\S+ )?done|Successfully built)!) { |
| 82 | + if ($log =~ m!(naming to docker.io/movabletype/test:$name (\S+ )?done|Successfully built|exporting manifest list .* done)!) { |
63 | 83 | if ($log =~ /No package (.+) available/) { |
64 | 84 | rename "log/build_$name.log" => "log/build_warn_$name.log"; |
65 | 85 | } else { |
|
0 commit comments