#!/bin/bash

#//// GREG POUR LE GARAGE NUMERIQUE \\\\#

# Ce script fonctionne avec le docker-compose.yml du projet https://gitlab.com/greglebreton/docker.git -> branche docker-registry
# Ce script maintient un registre privée accueillant des sauvegardes de conteneurs quotidiennement de manière automatisée.
# Le delta est exprimé en jour et est effectué par comparaison entre la date du jour et la date d'enregistrement de l'image.

date=$(date +"%Y-%m-%d")

# A RENSEIGNER
## chemin vers le dossier docker cloné sans le dernier /
registryPath=""
## exemple monRegistreDocker.monDomaine.com
dockerRegistryAdress=""
## nombre de jours de sauvegarde à conserver par rapport à la date du jour (à ajuster si les sauvegardes ne sont pas quotidiennes)
max=""
## registres à ignorer
exceptions=( "container1" "container2" )

###################################################################################################

echo "docker clean start..."

## DOCKER LIST IMG REGISTRY
registry=$(ls $registryPath/registry-data/docker/registry/v2/repositories/)

## DOCKER LIST TAGS FOR EACH REPO
for repo in $registry
do
    for ex in ${exceptions[@]}
    do
        if [ $repo == $ex ]
        then
            break
        else
            tags=$(ls $registryPath/registry-data/docker/registry/v2/repositories/$repo/_manifests/tags/) 

            for tag in $tags
            do
                datebackup=$(stat -c '%w' $registryPath/registry-data/docker/registry/v2/repositories/$repo/_manifests/tags/$tag)
                gooddatebackup="${datebackup:0:10}"

                echo $gooddatebackup

                if [ ${tag:0:2} == "01" ]
                then
                    break
                else
                    let delta=($(date +%s -d $date)-$(date +%s -d $gooddatebackup))/86400

                    if [ $delta -gt $max ]
                    then
                        echo "$dockerRegistryAdress/$repo:$tag deleted!"
                        regctl tag rm $dockerRegistryAdress/$repo:$tag
                    fi
                fi
            done
        fi
    done
done

echo "registre nettoyé"
