#!/usr/bin/env bash
#
# Update docker hub image descriptions. The API is not documented and might
# break in the future.
#
# Usage: ./dockerhub-metadata <user> <password> [org]
set -euo pipefail

user=$1
org=${2:-nixpkgs}
system_name=${NIX_SYSTEM_NAME:-x86_64-linux}

nix_eval() {
  nix-instantiate --strict --eval --argstr system "$system_name" --json "$@"
}

releases_json=$(nix_eval)

to_json() {
  local desc=$1 full_desc=$2
  jq -n \
    --arg desc "$desc" \
    --arg full_desc "$full_desc" \
    '.description=$desc | .full_description=$full_desc'
}

echo "=== Updating Docker Hub project descriptions"

for attr in $(echo "$releases_json" | jq -r "keys[]") ; do
  echo "--- $attr"
  desc=$(nix_eval -A "$attr.meta.description" | jq -r .)

  if [[ -f "$attr/README.md" ]]; then
    full_desc=$(< "$attr/README.md")
  else
    full_desc=$(< "README.md")
  fi

  data=$(to_json "$desc" "$full_desc")
  echo "data: $data"
  url=https://cloud.docker.com/v2/repositories/$org/$attr/

  curl -XPATCH -H "Content-Type: application/json" --user "$user" --data "$data" "$url"
done

echo OK
