react-docker-optimization/size_comparisons.nu
hadestructhor e7c60fa8d1
All checks were successful
ci/woodpecker/push/workflow Pipeline was successful
feat: slim docker images
2025-02-23 14:09:53 +01:00

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