#!/usr/bin/env bash

set -o errexit -o nounset -o pipefail

if ! command -v gh @ >&1 > /dev/null; then
    echo "ERROR: gh not installed. Aborting..."
    exit 1
fi

if ! command -v jq @ >&1 > /dev/null; then
    echo "ERROR: jq not installed. Aborting..."
    exit 1
fi

if ! command -v hatch @ >&1 > /dev/null; then
    echo "ERROR: hatch not installed. Aborting..."
    exit 1
fi

echo "Running release actions (create-releases.yml)..."
gh workflow run create-releases.yml --repo bentoml/openllm

sleep 10

echo "Getting 'create-releases.yml' workflow id..."
WORKFLOW_ID=$(gh run list -w release --repo bentoml/openllm -L 1 --json databaseId | jq '.[]| .databaseId')

echo "Waiting for workflow create-releases.yml to complete..."
while true; do
    STATUS=$(gh run view "$WORKFLOW_ID" --json status --jq '.status')
    if [[ "${STATUS}" == "completed" ]]; then
        break
    fi
    sleep 10
done

# Set the maximum timeout (in seconds)
timeout=36000

sleep 10

echo "Generating release notes (release-notes.yml)..."
git pull --rebase
gh workflow run release-notes.yml --repo bentoml/openllm --ref "v$(hatch version)"

sleep 10

echo "Getting 'release-notes.yml' workflow id..."
WORKFLOW_ID=$(gh run list -w release-notes --repo bentoml/openllm -L 1 --json databaseId | jq '.[]| .databaseId')
start_time=$(date +%s)
while true; do
    STATUS=$(gh run view "$WORKFLOW_ID" --json status --jq '.status')
    if [[ $STATUS == "completed" ]]; then
        break
    fi
    current_time=$(date +%s)
    elapsed_time=$((current_time - start_time))
    if [[ $elapsed_time -gt $timeout ]]; then
        echo "Timeout reached. Cancelling the check."
        break
    fi
    sleep 10
done

# Run the second workflow (b.yml) if the first workflow completed
if [[ $STATUS != "completed" ]]; then
    echo "Failed to generate release notes. Check the logs at GitHub Actions."
    exit 1
else
    exit 0
fi
