#!/usr/bin/env bash
set -euo pipefail

repo="${1:-pypi}"
tag="${2:-${RELEASE_TAG:-}}"

scripts/release/build "$repo" "$tag"

case "$repo" in
  pypi)
    repo_url="${TWINE_REPOSITORY_URL:-}"
    ;;
  testpypi)
    repo_url="${TWINE_REPOSITORY_URL:-https://test.pypi.org/legacy/}"
    ;;
  *)
    echo "unknown repository: $repo" >&2
    exit 1
    ;;
esac

args=()
if [ -n "$repo_url" ]; then
  args+=(--repository-url "$repo_url")
fi

PYTHON_BIN="${PYTHON_BIN:-python3}"
export PYTHON_BIN

"$PYTHON_BIN" -m pip install --upgrade twine

mapfile -t staged_files < <(find "artifacts/release/$repo" -maxdepth 1 -type f \( -name '*.whl' -o -name '*.tar.gz' \) | sort)
if [ "${#staged_files[@]}" -ne 2 ]; then
  echo "expected exactly 2 staged distribution files in artifacts/release/$repo, found ${#staged_files[@]}" >&2
  printf 'staged files:\n%s\n' "${staged_files[*]:-}" >&2
  exit 1
fi

"$PYTHON_BIN" -m twine upload "${args[@]}" "${staged_files[@]}"
