#!/bin/sh
set -eu

usage() {
    echo "$0: REGISTRY_DOMAIN BACKUP_DEST"
}

if [ "${1:-}" = -h ] || [ "${1:-}" = --help ]
then
    usage
    exit 0
fi

if [ "$#" -ne 2 ]
then
    usage
    exit 1
fi

command -v skopeo >/dev/null || { echo 'skopeo is missing.' >&2; exit 2; }

registry="$1"
dest="$2"

mkdir -p "$dest"

reg ls "$registry" | \
   sed 's/,//g' | \
   awk -v "registry=$registry" -v "dest=$dest" '
BEGIN {
    exitcode = 0
}
NR>2 {
    system("mkdir -p " dest "/" $1)
    for (i=2; i<=NF; i++) {
        image_url = registry "/" $1 ":" $(i)
        image_file = dest "/" $1 "/" $(i) ".tar"
        printf "Saving %s to %s.\n", image_url, image_file
        system("[ ! -f " image_file " ] || rm " image_file)
        if (system("skopeo copy docker://" image_url " docker-archive://" image_file) == 0)
            printf "Backup of %s was successful.\n", image_url
        else {
            exitcode = 1
            printf "Backup of %s failed, continuing with other images.\n", image_url
        }
    }
}
END {
    if ( exitcode == 1) print "Backup failed for some images."
    exit exitcode
}
'
