#!/bin/sh -eu

: "${DOCKER_BIN:=docker}"

cd "$RUN_DIR"

builddir=build

_latest_python_version() {
    filter="$1"
    filter_regex=$(echo "$filter" | sed 's/\./\\\\./')
    curl -sfL https://api.github.com/repos/python/cpython/git/refs/tags \
    | jq -r 'map(select(.ref | test("^refs/tags/v?'"$filter_regex"'($|\\.)")) | .ref | match("refs/tags/v?(.*)").captures[0].string)[]' \
    | grep -xE '[.0-9]+' \
    | sort --version-sort \
    | tail -n 1
}

[ -z "${DEBUG:-}" ] || set -x

mkdir -p "$builddir"

python_version_filter=$(cat .python-version)
python_version=$(_latest_python_version "$python_version_filter")

if [ -z "$python_version" ]; then
    echo >&2 "No Python version found matching the filter: $python_version_filter"
    exit 1
fi

githash_short=$(git rev-parse --short HEAD)
githash_long=$(git rev-parse HEAD)
version="$githash_short"
echo "$version" >"$builddir"/version

poetry export \
    --with=build \
    --output="$builddir"/requirements.txt

$DOCKER_BIN build \
    --pull \
    --build-arg="PYTHON_VERSION=$python_version" \
    --label="python.version=$python_version" \
    --label="git.hash=$githash_long" \
    --tag="code.dumpr.org/ducklet/unwind":"$version" \
    .
