#!/bin/sh

set -eu

timeout_delay=15

check_token() {
  set +e

  echo "Checking for existing token..."
  if ! token=$(kubectl get secret "${SECRET_NAME}" -o jsonpath="{.data['token']}" 2> /dev/null); then
    return 1
  fi

  if [ -z "${token}" ]; then
    return 2
  fi

  return 0
}

create_token() {
  echo "Waiting for new token to be generated..."
  begin=$(date +%s)
  end=$((begin + timeout_delay))
  while true; do
    [ -f /data/actions/token ] && return 0
    [ "$(date +%s)" -gt $end ] && return 1
    sleep 5
  done
}

store_token() {
  echo "Storing the token in Kubernetes secret..."
  kubectl patch secret "$SECRET_NAME" -p "{\"data\":{\"token\":\"$(base64 /data/actions/token | tr -d '\n')\"}}"
}

if check_token; then
  echo "Key already in place, exiting."
  exit
fi

if ! create_token; then
  echo "Checking for an existing act runner token in secret $SECRET_NAME timed out after $timeout_delay"
  exit 1
fi

store_token