#!/bin/bash


ask_yn () {
    echo >&2 "$@"
    while read -r; do
        case $REPLY in
            [Yy]*) return 0;;
            [Nn]*) return 1;;
            *) echo >&2 "Enter yes or no";;
        esac
    done
    return 2  # EOF
}


sanitize_tag () {
    # a tag follows the same rules as a DNS domain name in terms of what's permitted to be in it
    tr -cs 'a-zA-Z0-9.-' '[-*]' \
    | sed -e 's|^[.-]*||' \
          -e 's|[.-]*$||' \
    | cut -c 1-63
}


branch_to_tag() {
    git symbolic-ref -q --short HEAD |
    sed -r  -e 's#^(pr/)|(wip/)##' \
            -e 's/(SOFTWARE|HTCONDOR|OPS|OSPOOL|INF)-[0-9]+\.//' \
            -e 's/master$/latest/' \
            -e 's/main$/latest/' |
    sanitize_tag
}


Git=git
if [[ $1 && -d $1 ]] && git -C "$1" rev-parse HEAD &>/dev/null
then
    Git=git\ -C\ "$1"
    prefix=$(basename "$1" | sanitize_tag).
else
    prefix=$(basename "$PWD" | sanitize_tag).
fi

labels=()

if $Git rev-parse HEAD &>/dev/null
then
    describe=$($Git describe --tags --long --dirty 2>/dev/null || $Git describe --all --always --long --dirty 2>/dev/null)
    describe=${describe#heads/}
    if [[ $describe ]]
    then
        labels+=(--label="${prefix}git.describe=$describe")
    fi
    gitbranch=$($Git symbolic-ref -q --short HEAD 2>/dev/null)
    if [[ $gitbranch ]]
    then
        labels+=(--label="${prefix}git.branch=$gitbranch")
    fi
fi
buildhost=$(hostname -f)
builder=$($Git config --get user.email 2>/dev/null)
if [[ ! $builder ]]
then
    builder=$(whoami)@$buildhost
fi

labels+=(--label="${prefix}builder=$builder")
labels+=(--label="${prefix}buildhost=$buildhost")

printf "%q " "${labels[@]}"; printf "\n"

