def main [bench_size:int=5] { let res_dir = 'start_results' (mkdir $res_dir) let bench = [ ['tag', 'image', 'hport', 'dport']; ['simple-dockerfile', 'react-simple', 3000, 3000], ['multi-stage-dockerfile', 'react-multistage', 3000, 3000], ['node-alpine-dockerfile', 'react-multistage-alpine', 3000, 3000], ['nginx-dockerfile', 'react-nginx', 80, 80], ['nginx-alpine-dockerfile', 'react-nginx-alpine', 80, 80], ['bun-rspack-dockerfile', 'react-bun-rspack', 80, 80], ['nginx-distroless-dockerfile', 'react-nginx-distroless', 80, 8080] ] mut bench_results = [] for entry in $bench { (docker stop $entry.image) (docker container rm $entry.image) (docker run -d -p $'($entry.hport):($entry.dport)' --name $entry.image $entry.image) (docker stop $entry.image) print $'Starting bench for image ($entry.image)' let total_time = timeit { mut csv_results = [] for i in 1..$bench_size { let time = timeit { (docker start $entry.image) let hport = $entry.hport mut curl_res = curl -s --write-out '%{http_code}' $'http://localhost:($entry.hport)' | str substring (-3..) while curl_res != '200' { $curl_res = (curl -s --write-out '%{http_code}' $'http://localhost:($entry.hport)' | str substring (-3..)) if $curl_res == '200' { break } } (docker stop $entry.image) } $csv_results = ($csv_results ++ [['tag', 'image', 'time']; [$entry.tag, $entry.image, $time]]) print $'Time for ($i) out of ($bench_size) for image ($entry.image) : ($time)' } $csv_results | to csv | save -f $'./($res_dir)/($entry.tag).csv' print $csv_results } print $'Total time for image ($entry.image): ($total_time)' } }