Недавно доверенная публикация попала в pypi.
Это своего рода обмен ключами без явного секрета от Github. Я изо всех сил пытаюсь вернуть api_token от pypi.
# retrieve the ambient OIDC token
resp=$(curl -H "Authorization: bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
"$ACTIONS_ID_TOKEN_REQUEST_URL&audience=pypi")
echo "RESP ${resp}"
oidc_token=$(jq '.value' <<< "${resp}")
echo "OIDC ${oidc_token}"
# exchange the OIDC token for an API token
resp=$(curl -X POST https://pypi.org/_/oidc/github/mint-token -d '{"token":"${oidc_token}"}')
echo "RESP ${resp}"
api_token=$(jq '.token' <<< "${resp}")
echo "api_token ${api_token}"
В настоящее время я получаю сообщение о том, что служба недоступна (503). Я предпринял многочисленные попытки в https://github.com/tschm/pyhrp. Я подозреваю, что делаю какую-то глупость с запросом POST.
В pypi я определил доверенного издателя для этого конкретного проекта.
В '{"token":"${oidc_token}"}'
переменная oidc_token
не будет расширяться, поскольку переменные оболочки не расширяются, если они заключены в одинарные кавычки.
Таким образом, использование двойных кавычек и экранирование вложенных двойных кавычек должно исправить это.
Изменять
'{"token":"${oidc_token}"}'
к
"{\"token\":\"${oidc_token}\"}"
и это должно работать.
Кроме этого здесь:
oidc_token=$(jq '.value' <<< "${resp}")
При отсутствии необработанного флага вывода -r
вывод будет заключен в двойные кавычки, т. е. "token"
.
Чтобы исправить это, используйте -r
:
oidc_token=$(jq -r '.value' <<< "${resp}")
oidc_token
теперь не будет окружать двойные кавычки, т.е. token
.
А еще лучше, вы можете позволить jq
сделать все за вас, то есть создать JSON с токеном и также экранировать:
json_data=$(jq -c '{"token": "\(.value)"} | @json' <<< "${resp}")
json_data
теперь будет:
"{\"token\":\"token\"}"
Вы можете напрямую использовать его в своем POST-запросе с флагом -d
.