Merge pull request 'fix: fix: setup_forge silently fails to create users and tokens — .env has no FORGE_TOKEN after init (#658)' (#659) from fix/issue-658 into main

This commit is contained in:
johba 2026-03-25 07:59:51 +01:00
commit b41929df19

View file

@ -361,6 +361,23 @@ setup_forge() {
echo " ready" echo " ready"
fi fi
# Wait for Forgejo database to accept writes (API may be ready before DB is)
echo -n "Waiting for Forgejo database"
local db_ready=false
for _i in $(seq 1 30); do
if _forgejo_exec forgejo admin user list >/dev/null 2>&1; then
db_ready=true
break
fi
echo -n "."
sleep 1
done
echo ""
if [ "$db_ready" != true ]; then
echo "Error: Forgejo database not ready after 30s" >&2
exit 1
fi
# Create admin user if it doesn't exist # Create admin user if it doesn't exist
local admin_user="disinto-admin" local admin_user="disinto-admin"
local admin_pass local admin_pass
@ -368,12 +385,22 @@ setup_forge() {
if ! curl -sf --max-time 5 "${forge_url}/api/v1/users/${admin_user}" >/dev/null 2>&1; then if ! curl -sf --max-time 5 "${forge_url}/api/v1/users/${admin_user}" >/dev/null 2>&1; then
echo "Creating admin user: ${admin_user}" echo "Creating admin user: ${admin_user}"
_forgejo_exec forgejo admin user create \ local create_output
if ! create_output=$(_forgejo_exec forgejo admin user create \
--admin \ --admin \
--username "${admin_user}" \ --username "${admin_user}" \
--password "${admin_pass}" \ --password "${admin_pass}" \
--email "admin@disinto.local" \ --email "admin@disinto.local" \
--must-change-password=false 2>/dev/null || true --must-change-password=false 2>&1); then
echo "Error: failed to create admin user '${admin_user}':" >&2
echo " ${create_output}" >&2
exit 1
fi
# Verify admin user was actually created
if ! curl -sf --max-time 5 "${forge_url}/api/v1/users/${admin_user}" >/dev/null 2>&1; then
echo "Error: admin user '${admin_user}' not found after creation" >&2
exit 1
fi
fi fi
# Get or create admin token # Get or create admin token
@ -393,6 +420,11 @@ setup_forge() {
| jq -r '.[0].sha1 // empty') || admin_token="" | jq -r '.[0].sha1 // empty') || admin_token=""
fi fi
if [ -z "$admin_token" ]; then
echo "Error: failed to obtain admin API token" >&2
exit 1
fi
# Create bot users and tokens # Create bot users and tokens
local dev_token="" review_token="" local dev_token="" review_token=""
for bot_user in dev-bot review-bot; do for bot_user in dev-bot review-bot; do
@ -403,11 +435,23 @@ setup_forge() {
-H "Authorization: token ${admin_token}" \ -H "Authorization: token ${admin_token}" \
"${forge_url}/api/v1/users/${bot_user}" >/dev/null 2>&1; then "${forge_url}/api/v1/users/${bot_user}" >/dev/null 2>&1; then
echo "Creating bot user: ${bot_user}" echo "Creating bot user: ${bot_user}"
_forgejo_exec forgejo admin user create \ local create_output
if ! create_output=$(_forgejo_exec forgejo admin user create \
--username "${bot_user}" \ --username "${bot_user}" \
--password "${bot_pass}" \ --password "${bot_pass}" \
--email "${bot_user}@disinto.local" \ --email "${bot_user}@disinto.local" \
--must-change-password=false 2>/dev/null || true --must-change-password=false 2>&1); then
echo "Error: failed to create bot user '${bot_user}':" >&2
echo " ${create_output}" >&2
exit 1
fi
# Verify bot user was actually created
if ! curl -sf --max-time 5 \
-H "Authorization: token ${admin_token}" \
"${forge_url}/api/v1/users/${bot_user}" >/dev/null 2>&1; then
echo "Error: bot user '${bot_user}' not found after creation" >&2
exit 1
fi
fi fi
# Generate token via API (using admin credentials for the bot) # Generate token via API (using admin credentials for the bot)
@ -429,6 +473,11 @@ setup_forge() {
| jq -r '.sha1 // empty') || token="" | jq -r '.sha1 // empty') || token=""
fi fi
if [ -z "$token" ]; then
echo "Error: failed to create API token for '${bot_user}'" >&2
exit 1
fi
if [ "$bot_user" = "dev-bot" ]; then if [ "$bot_user" = "dev-bot" ]; then
dev_token="$token" dev_token="$token"
else else