diff --git a/packages/mosaic/framework/tools/_lib/credentials.sh b/packages/mosaic/framework/tools/_lib/credentials.sh index dd05972..64d4d63 100755 --- a/packages/mosaic/framework/tools/_lib/credentials.sh +++ b/packages/mosaic/framework/tools/_lib/credentials.sh @@ -15,13 +15,23 @@ # # After loading, service-specific env vars are exported. # Run `load_credentials --help` for details. +# +# Resolution order (first match wins): +# 1. $MOSAIC_CREDENTIALS_FILE (explicit override — never second-guessed) +# 2. $HOME/.config/mosaic/credentials.json +# 3. /etc/mosaic/credentials.json (host-level fallback) +# The /etc fallback exists for HOME-redirected profile environments, where +# $HOME points at a per-profile directory that has no credentials file. +# Operators symlink /etc/mosaic/credentials.json to the host's canonical +# file once, instead of exporting MOSAIC_CREDENTIALS_FILE per invocation. if [[ -z "${MOSAIC_CREDENTIALS_FILE:-}" ]]; then - for _cand in "$HOME/.config/mosaic/credentials.json"; do + for _cand in "$HOME/.config/mosaic/credentials.json" "/etc/mosaic/credentials.json"; do if [[ -f "$_cand" ]]; then MOSAIC_CREDENTIALS_FILE="$_cand"; break; fi done : "${MOSAIC_CREDENTIALS_FILE:=$HOME/.config/mosaic/credentials.json}" fi +export MOSAIC_CREDENTIALS_FILE _mosaic_require_jq() { if ! command -v jq &>/dev/null; then diff --git a/packages/mosaic/framework/tools/git/detect-platform.sh b/packages/mosaic/framework/tools/git/detect-platform.sh index 69156e9..e9e1901 100755 --- a/packages/mosaic/framework/tools/git/detect-platform.sh +++ b/packages/mosaic/framework/tools/git/detect-platform.sh @@ -86,7 +86,12 @@ gitea_url_matches_host() { get_gitea_service_for_host() { local host="$1" - local cred_file="${MOSAIC_CREDENTIALS_FILE:-$HOME/.config/mosaic/credentials.json}" + local cred_file="${MOSAIC_CREDENTIALS_FILE:-}" + if [[ -z "$cred_file" ]]; then + # Same resolution chain as _lib/credentials.sh: profile HOME, then host-level. + cred_file="$HOME/.config/mosaic/credentials.json" + [[ -f "$cred_file" ]] || cred_file="/etc/mosaic/credentials.json" + fi case "$host" in git.mosaicstack.dev)