77 lines
3 KiB
Text
77 lines
3 KiB
Text
let steps = [
|
|
['step', 'image', 'next_step'];
|
|
['0', 'react-simple', '1'],
|
|
['1', 'react-multistage', '2'],
|
|
['2', 'react-multistage-alpine', '3'],
|
|
['3', 'react-nginx', '4'],
|
|
['4', 'react-nginx-alpine', '5'],
|
|
['5', 'react-bun-rspack', '6'],
|
|
['6', 'react-nginx-distroless', '0'],
|
|
];
|
|
|
|
mut max_size = 0B
|
|
mut min_size = 0B
|
|
mut max_size_slim = 0B
|
|
mut min_size_slim = 0B
|
|
|
|
let all_res = docker image ls | from ssv | select REPOSITORY TAG SIZE | into filesize SIZE | where REPOSITORY starts-with "react"
|
|
|
|
for $entry in $steps {
|
|
let docker_res = $all_res | where REPOSITORY == $entry.image
|
|
|
|
let latest_res = $docker_res | where TAG == 'latest' | get 0
|
|
let slim_res = $docker_res | where TAG == 'slim' | get 0
|
|
|
|
let size: filesize = $latest_res | get SIZE
|
|
let size_slim: filesize = $slim_res | get SIZE
|
|
|
|
if $max_size == 0MiB or $size >= $max_size {
|
|
$max_size = $size
|
|
}
|
|
if $min_size == 0MiB or $size <= $min_size {
|
|
$min_size = $size
|
|
}
|
|
|
|
if $max_size_slim == 0MiB or $size_slim >= $max_size_slim {
|
|
$max_size_slim = $size_slim
|
|
}
|
|
if $min_size_slim == 0MiB or $size_slim <= $min_size_slim {
|
|
$min_size_slim = $size_slim
|
|
}
|
|
}
|
|
|
|
mut current = $steps | where step == '0' | get 0
|
|
mut result: table<step:string, image:string, latest_size:filesize, slim_size:filesize, latest_times_smaller:float, latest_percent_decrease:float, slim_times_smaller:float, slim_percent_decrease:float> = []
|
|
|
|
while $current.next_step != '0' {
|
|
let docker_res = $all_res | where REPOSITORY == $current.image
|
|
let latest_res = $docker_res | where TAG == 'latest' | get 0
|
|
let slim_res = $docker_res | where TAG == 'slim' | get 0
|
|
let size: filesize = $latest_res | get SIZE
|
|
let size_slim: filesize = $slim_res | get SIZE
|
|
let row = [
|
|
['step', 'image', 'latest_size', 'slim_size', 'latest_times_smaller', 'latest_percent_decrease', 'slim_times_smaller', 'slim_percent_decrease'];
|
|
[$current.step, $current.image, $size, $size_slim, ($max_size / $size), (($max_size - $size) * 100 / $max_size), ($max_size / $size_slim), (($max_size - $size_slim) * 100 / $max_size)]
|
|
]
|
|
$result = ($result ++ $row)
|
|
$current = $steps | where step == $current.next_step | get 0
|
|
}
|
|
|
|
let docker_res = $all_res | where REPOSITORY == $current.image
|
|
let latest_res = $docker_res | where TAG == 'latest' | get 0
|
|
let slim_res = $docker_res | where TAG == 'slim' | get 0
|
|
let size: filesize = $latest_res | get SIZE
|
|
let size_slim: filesize = $slim_res | get SIZE
|
|
let row = [
|
|
['step', 'image', 'latest_size', 'slim_size', 'latest_times_smaller', 'latest_percent_decrease', 'slim_times_smaller', 'slim_percent_decrease'];
|
|
[$current.step, $current.image, $size, $size_slim, ($max_size / $size), (($max_size - $size) * 100 / $max_size), ($max_size / $size_slim), (($max_size - $size_slim) * 100 / $max_size)]
|
|
]
|
|
$result = ($result ++ $row)
|
|
|
|
|
|
print $'Max size: ($max_size), Min size: ($min_size)'
|
|
print $'Max size slim: ($max_size_slim), Min size slim: ($min_size_slim)'
|
|
|
|
$result | to md --pretty | save -f size_comparisons.md
|
|
|
|
$result
|