#!/bin/sh repeat_char(){ end="$1" for _ in $(seq 1 "$end") ; do printf '%s' "$2"; done } header(){ env printf "┌$(repeat_char 40 ─)┐\n" env printf '│ %-38s │\n' "$1" env printf "└$(repeat_char 40 '─')┘\n" } base_images_cache='' pull_base_images(){ base_images=$(echo "$1" | sed 's/ /\n/g' | rg -v "^($(printf '%s' "$base_images_cache" | sed -s 's/ /\|/g'))$" | paste -sd ' ') # echo "BASE: $base_images" # echo "CACHE: $base_images_cache" if [ -n "$base_images" ]; then base_images_cache="$base_images_cache $base_images" echo 'Downloading base images' echo "$base_images" | xargs -n1 docker pull fi } build(){ [ ! -d "$1" ] && return 0 header "$(basename "$1")" pull_base_images "$(fd Dockerfile "$1" -x rg FROM | cut -d ' ' -f 2 | sort | uniq | paste -sd ' ')" echo 'Building...' if [ -z "$2" ]; then (cd "$1" && docker compose pull) (cd "$1" && docker compose build) else (cd "$1" && docker compose build "$2") fi } if ! rc-service docker status > /dev/null; then echo 'Docker is not started, exiting' return 1 fi build ~/git/Byron build ~/git/CoverLetter build ~/git/CurriculumVitae build ~/git/dotfiles build ~/git/ESP32Manager build ~/git/haskell_playground build ~/git/IntershipReport build ~/git/notebook build ~/git/portfolio no_ssl build ~/git/portfolio_ivo no-ssl build ~/git/SimpleGradientDescent build ~/git/sorting_algorithms build ~/git/VariationalAutoEncoder build ~/git/ViolaJones build ~/git/wgan-gp build ~/git/WGAN-GP_Pytorch build ~/git/workspace/Data\ analysis/Speed\ dating\ experiment build ~/git/workspace/Miage/M2/Implementation\ de\ l\'IA build ~/git/workspace/personnal_projects/open_webui build ~/git/workspace/personnal_projects/kiwix build ~/git/workspace/personnal_projects/compiler-explorer build ~/git/Ventoy